javascript - 将一个数组的项属性合并到另一个数组的项中

标签 javascript ecmascript-6

关于执行以下操作的最佳方法,我有几个问题:

  1. 调用两个不同的 API:

    axios.get(contents);
    axios.get(favorites);
    
  2. 响应将如下所示:

    contents: [
       {
           id: 1,
           value: someValue
       },
       {
           id: 2,
           value: someValue
       }
    ];
    
    favorites: [
        {
            id: 1,
            contentId: 2    
        }
    ];
    

contentIdid 匹配时,循环遍历每个收藏夹并将元素添加到 contens 数组的最佳方法是什么,例如 isFavorite: true 。它应该如下所示:

    contents: [
        {
            id: 1,
            value: someValue
        {,
        {
            id: 2,
            value: someValue
            isFavorite: true
        {
    ];

执行此操作的最佳位置是什么?是否有任何 ES6 语法可以轻松执行此操作?我目前有两个单独的操作,一个获取内容,一个获取收藏夹,我可以合并它们或在 reducer 中组合它们。

有什么建议吗?

最佳答案

您可以使用 Setfavorites 中收集所有 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/

相关文章:

javascript - window.print() 位置 DIV 页面中心

javascript - 在 Vue.js 中替换可观察数组的方法是什么?

javascript - 仅当元素加载时才运行 vue 组件

javascript - 类里面的字典?

javascript - 如何在函数定义中一起使用剩余和扩展运算符?

javascript - 在 Wordpress 中使用 Slicknav

javascript - 在函数中使用动态导入时,如何在全局变量中指定类型信息?

javascript - 填充node_modules

javascript - 无法使用 es6、babel、webpack 3、javascript 打印动态消息

javascript - JS 跳出函数