关于执行以下操作的最佳方法,我有几个问题:
调用两个不同的 API:
axios.get(contents); axios.get(favorites);
响应将如下所示:
contents: [ { id: 1, value: someValue }, { id: 2, value: someValue } ]; favorites: [ { id: 1, contentId: 2 } ];
当 contentId
与 id 匹配时,循环遍历每个收藏夹并将元素添加到 contens 数组的最佳方法是什么,例如
。它应该如下所示:isFavorite: true
contents: [
{
id: 1,
value: someValue
{,
{
id: 2,
value: someValue
isFavorite: true
{
];
执行此操作的最佳位置是什么?是否有任何 ES6 语法可以轻松执行此操作?我目前有两个单独的操作,一个获取内容,一个获取收藏夹,我可以合并它们或在 reducer 中组合它们。
有什么建议吗?
最佳答案
您可以使用 Set
从 favorites
中收集所有 contentId
值,然后遍历您的 contents
数组。这比在数组上使用 some
具有更好的时间复杂度,因为在 Set
上调用 .has()
是 O(1):
let contents = [{
id: 1,
value: 'someValue1'
},
{
id: 2,
value: 'someValue2'
},
{
id: 3,
value: 'someValue'
}
];
let favorites = [{
id: 1,
contentId: 2
},
{
id: 2,
contentId: 3
}
];
let favoriteContents = new Set(favorites.map(f => f.contentId));
contents.forEach(c => {
if (favoriteContents.has(c.id)) c.isFavorite = true;
});
console.log(contents);
关于javascript - 将一个数组的项属性合并到另一个数组的项中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53125063/