如何使这种构造更简单?

时间:2018-06-29 12:23:21

标签: javascript arrays

如何使这种构造更简单?

 categories.map(item => {
        localCategories.map(localItem => {
          if (localItem.id === item.id) {
            item.name = localItem.name;
          }
        });
      });

localCategories是json文件中的对象数组..............

类别是类似的数组..............

"localCategories": 
          [
            {
              "id": "1",
              "name": "Музыка",
              "img" : "31526348973.png"
            },
            {
              "id": "4",
              "name": "Жңылык",
              "img" : "31526309377.png"
            },
            {
              "id": "7",
              "name": "Балдарга",
              "img": "31526300037.png"
            }
]

2 个答案:

答案 0 :(得分:2)

不是真正的“简单”,但更易于阅读:

localCategories.forEach(({name, id}) =>
  categories.find(c => c.id === id).name = name);

或者使用查找表的一种可能很麻烦的方式:

const catByID = new Map(localCategories.map(c => ([c.id, c]));

categories.forEach(({id, name}) => catById.get(id).name = name);

答案 1 :(得分:1)

这可以通过mapfind完成。请注意,findByIdcurried,以提高find方法中的可读性:

const findById = id => list => list.id === id

categories.map(category => ({
  ...category,
  name: localCategories.find(findById(category.id)).name,
}))

您可能希望通过在map内执行类似的操作来确保找到的对象存在,以便在尝试访问name属性时不会引发错误:

const foundCategory = localCategories.find(findById(category.id))
return {
  ...category,
  name: foundCategory ? foundCategory.name : 'Some default value',
}