javascript - 如何在 FlatList 中按照我想要的方式对其进行排序?
问题描述
我想按照烹饪中 10 种内容和 10 种成分的值的数量匹配的顺序列出项目(在卡片组件中)。
我的最终目标是按照内容和成分匹配的数量顺序列出 Card 组件中的项目。
Cookup 和成分的范围分别为 1 到 10。
cookup:
[
0:{ name: "second" content1: "1" content2: "2" content3: "3" content4: "6" content5: "7" content6: "5" content7: "empty" content8: "10" content9: "8" content10: "9" }
1:{name: "third" content1: "1" content2: "2" content3: "3" content4: "empty" content5: "5" content6: "empty" content7: "4" content8: "empty" content9: "6" content10: "empty"}
2:{name: "four" content1: "1" content2: "2" content3: "3" content4: "empty" content5: "4" content6: "empty" content7: "empty" content8: "empty" content9: "empty" content10: "empty"}
3:{name: "first" content1: "8" content2: "2" content3: "3" content4: "1" content5: "4" content6: "6" content7: "7" content8: "5" content9: "9" content10: "10"}
4:{name: "fifth" content1: "empty" content2: "empty" content3: "3" content4: "1" content5: "empty" content6: "2" content7: "empty" content8: "empty" content9: "empty" content10: "empty"}
]
成分具有这些价值。
ingredients1: 1
ingredients2: 2
ingredients3: 3
ingredients4: 4
ingredients5: 5
ingredients6: 6
ingredients7: 7
ingredients8: 8
ingredients9: 9
ingredients10: 10
我想按照内容和成分匹配数量最多的顺序列出项目。
预期的项目价值是
item:
{name: "first" content1: "8" content2: "2" content3: "3" content4: "1" content5: "4" content6: "6" content7: "7" content8: "5" content9: "9" content10: "10" }
{name: "second" content1: "1" content2: "2" content3: "3" content4: "6" content5: "7" content6: "5" content7: "empty" content8: "10" content9: "8" content10: "9"}
{name: "third" content1: "1" content2: "2" content3: "3" content4: "empty" content5: "5" content6: "empty" content7: "4" content8: "empty" content9: "6" content10: "empty" }
{name: "four" content1: "1" content2: "2" content3: "3" content4: "empty" content5: "4" content6: "empty" content7: "empty" content8: "empty" content9: "empty" content10: "empty"}
{name: "fifth" content1: "empty" content2: "empty" content3: "3" content4: "1" content5: "empty" content6: "2" content7: "empty" content8: "empty" content9: "empty" content10: "empty" }
我如何修复代码来做到这一点?
这是我的代码
(食物.js)
const Food = ({route}) => {
const [lastId, setLastId] = useState(30);
const {
ingredients1,
ingredients2,
ingredients3,
ingredients4,
ingredients5,
ingredients6,
ingredients7,
ingredients8,
ingredients9,
ingredients10,
} = route.params; // Receiving Value
const {cookUp, hasMorePosts, loadPostsLoading} = useSelector(
(state) => state.post,
);
console.log('cookup:', cookUp);
return (
<>
<FlatList
data={cookUp}
keyExtractor={(item) => String(item.id)}
renderItem={({item}) => (
console.log('ingredients1:', ingredients1),
console.log('ingredients2:', ingredients2),
console.log('ingredients3:', ingredients3),
console.log('ingredients4:', ingredients4),
console.log('ingredients5:', ingredients5),
console.log('ingredients6:', ingredients6),
console.log('ingredients7:', ingredients7),
console.log('ingredients8:', ingredients8),
console.log('ingredients9:', ingredients9),
console.log('ingredients10:', ingredients10),
(
<ImageContainer>
<Card
item={item}
ingredients1={ingredients1}
ingredients2={ingredients2}
ingredients3={ingredients3}
ingredients4={ingredients4}
ingredients5={ingredients5}
ingredients6={ingredients6}
ingredients7={ingredients7}
ingredients8={ingredients8}
ingredients9={ingredients9}
ingredients10={ingredients10}
/>
</ImageContainer>
)
)}
/>
</>
);
};
export default Food;
(卡片.js)
const Card = ({item, ingredients1,ingredients2,ingredients3,
ingredients4,ingredients5,ingredients6,
ingredients7,ingredients8,ingredients9,ingredients10,
}) => {
console.log("item:",item);
return (
<>
</>
);
};
export default Card;
当我 console.log(cookup) 时,cookup 类型是这样的
解决方案
我仍然不完全确定我理解你在寻找什么。但是,根据我目前的理解,您有一个名为的数组cookout
,其中包含基于对象中包含内容或单词“空”的值的数量“更完整”或“更空”的单个对象。
您希望对列表进行排序,首先是最少“空”,最后是最“满”。
我创建了一个“空虚”测试器:
const emptiness = c => Object.values(c).filter(v => v === "empty").length;
它接受一个对象并计算 Object.values 中“空”值的数量。
我使用这个分数对数组进行排序cookout
:
const sorted = cookup.sort((a, b) => emptiness(a) - emptiness(b));
const cookup = [
{
content1: "1", content2: "2", content3: "3", content4: "6", content5: "7",
content6: "5", content7: "empty", content8: "10", content9: "8", content10: "9",
name: "second"
},
{
content1: "1", content2: "2", content3: "3", content4: "empty",
content5: "5", content6: "empty", content7: "4", content8: "empty",
content9: "6", content10: "empty", name: "third"
},
{
content1: "1", content2: "2", content3: "3", content4: "empty",
content5: "4", content6: "empty", content7: "empty", content8: "empty",
content9: "empty", content10: "empty", name: "four"
},
{
content1: "8", content2: "2", content3: "3", content4: "1", content5: "4",
content6: "6", content7: "7", content8: "5", content9: "9", content10: "10",
name: "first"
},
{
content1: "empty", content2: "empty", content3: "3", content4: "1",
content5: "empty", content6: "2", content7: "empty", content8: "empty",
content9: "empty", content10: "empty", name: "fifth"
},
{
content1: "empty", content2: "empty", content3: "empty", content4: "1",
content5: "empty", content6: "2", content7: "empty", content8: "empty",
content9: "empty", content10: "empty", name: "sixth"
}
];
const emptiness = c => Object.values(c).filter(v => v === "empty").length;
const sorted = cookup.sort((a, b) => emptiness(a) - emptiness(b));
console.log(sorted);
在您的实现中,这可能类似于:
const Food = ({route}) => {
const [lastId, setLastId] = useState(30);
const {
ingredients1,
ingredients2,
ingredients3,
ingredients4,
ingredients5,
ingredients6,
ingredients7,
ingredients8,
ingredients9,
ingredients10,
} = route.params; // Receiving Value
const {cookUp, hasMorePosts, loadPostsLoading} = useSelector(
(state) => state.post,
);
const emptiness = c => Object.values(c).filter(v => v === "empty").length;
return (
<>
<FlatList
data={cookUp.sort((a, b) => emptiness(a) - emptiness(b))}
推荐阅读
- rust - 从 Box 返回 &dyn Trait1
- python - 如果语句不起作用将 Outlook 发件人与现有数据帧条目进行比较
- asp.net - ASP.NET 使用多个 web.configs
- mysql - 在表单中提交时,花括号 (') 变为 ’
- php - 在 PDO 中的执行函数中将 NULL 值绑定到具有关联数组的命名占位符的问题
- sql - SQL Count 具有多个连接条件的数据
- processing - p5.js webgl 多边形线接头解决方法?
- jquery - 如何从jquery中选择用户单击的div
- python-3.x - 使用csv将多行排序为1行
- reactjs - 这个“请稍候”的实现有什么问题?