javascript - 在 React 中使用 Filter 迭代两个不同的对象
问题描述
这里我有一个对象数组:
listPosts = [
0: {
id = String
}
]
还有一个对象:
user = {
savedPosts = Array (containing array of listPosts[index].id)
}
我实际上需要显示已保存的帖子,并进行两次迭代,其中:
user.savedPosts[y] === listPosts[i].id
使用 for 循环,它看起来像这样:
for (let i = 0; i < listPosts.length; i++) {
for (let y = 0; i < user.savedPosts.length; y++) {
if (user.savedPosts[y] === listPosts[i].id)
return console.log('Matched');
}
}
如何通过使用过滤器迭代来“翻译”这个逻辑?
我知道在使用过滤器迭代数组/对象时,还有许多其他问题有类似的答案,但我真的无法解决这个问题。
我在这里发现了一些“相关”的问答,在这种情况下并没有真正的帮助,但在其他情况下可能会:
预先感谢您的解释和帮助。
解决方案
你可以做到这一点,过滤低。
const user = {
savedPosts: [
1, 2, 3, 6, 8, 11, 4
]
};
const listPosts = [
{ id: 1, title: "1" },
{ id: 2, title: "2" },
{ id: 3, title: "3" },
{ id: 4, title: "4" },
{ id: 5, title: "5" },
{ id: 6, title: "6" },
{ id: 7, title: "7" },
{ id: 8, title: "8" },
{ id: 9, title: "9" },
{ id: 10, title: "10" },
{ id: 11, title: "11" },
{ id: 12, title: "12" },
{ id: 13, title: "13" },
];
const result = listPosts.filter(l => user.savedPosts.indexOf(l.id) !== -1); // with list order
console.log(result);
const otherResult = user.savedPosts.map(p => listPosts.find(l => l.id === p)); // with user posts order
console.log(otherResult);
但是你的“for insile for”方法是最好的方法,你迭代N M次,但是在过滤方法中,你在最好的情况下迭代1次,在最坏的情况下迭代N!M次
推荐阅读
- windows - Go get under Windows: git bash 的 SSL 证书问题
- azure - Azure Pipelines 中的 Glob 模式以排除地图文件和资产文件夹
- python - 在 Lambda Python 中使用两个变量
- javascript - 如何只为数组中的第一项做某事
- java - @Consume 如何填充变量和对象?
- azure-devops - 代理服务在 VM 上运行,但在 DevOps 门户中显示为脱机
- javascript - JavaScript 映射对象
- r - 当我在 R 中多次运行代码时更新 csv
- typescript - 在打字稿中加载类属性
- java - 如何在 Firebase 实时数据库中检索值