javascript - 嵌套数组对象与另一个元素数组进行比较并使用 Javascript 或 ES6 创建新数组

标签 javascript arrays json typescript object

我有一个复杂的数组,如下所示

sectionDetail = [{id: 1, name:'ma'}, {id: 2, name:'na'}, {id: 3, name:'ra'}, {id: 4, name:'ka'}, {id: 5, name:'pa'}];

abc = [{id:'1', name:'zam', sections:['1',4]}, {id:'2', name:'dam', sections:['3']}, {id:'3', name:'nam', sections:['2','4']}];

现在我必须循环遍历各个部分的 abc,以将数组元素替换为其各自的 sectionDetail

我尝试将其循环到一个新变量,但我的部分每次都会被替换。下面是我尝试过的代码。

const matchingBoost = [];
const getCategoryBasedBoostList = [];
abc.forEach((item, i) => {
    sectionDetail.forEach((val, index) => {
      item.section.forEach((value, x) => {
        if (value == val.Id) {
          matchingBoost.push(val);
        }
      });
    });
    getCategoryBasedBoostList.push({
      Name: item.Name,
      Boost: matchingBoost
    });
  });

所以基本上我正在寻找一个像这样的新数组

xyz = [{name:'zam',  sections:[{id: 1, name:'ma'}, {id: 4, name:'ka'}]},
{name:'dam',  sections:[{id: 3, name:'ra'}]}, {name:'nam',  sections:[{id: 2, name:'na'}, {id: 4, name:'ka'}]}];

希望我说得有道理,并希望得到一些回应。

最佳答案

您基本上可以根据其中的 object.id 是否包含在 sections 中来过滤 sectionDetail 中的部分abc.在这两种情况下,我都将索引映射到数字,因为一个是字符串,另一个是整数。

sectionDetail = [{id: 1, name:'ma'}, {id: 2, name:'na'}, {id: 3, name:'ra'}, {id: 4, name:'ka'}, {id: 5, name:'pa'}];

abc = [{id:'1', name:'zam', sections:['1',4]}, {id:'2', name:'dam', sections:['3']}, {id:'3', name:'nam', sections:['2','4']}];

xyz = abc.map(item => ({...item, sections: sectionDetail.filter(sect => item.sections.map(id => parseInt(id)).includes(parseInt(sect.id)))}));

console.log(xyz);

关于javascript - 嵌套数组对象与另一个元素数组进行比较并使用 Javascript 或 ES6 创建新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58310192/

相关文章:

javascript - AngularJS 禁用 2 路绑定(bind)

用于表单输入的 Javascript switch 语句

asp.net-mvc - 以 JSON 格式提交表单(无 AJAX)

c# - 如何在 jquery 中创建 JSON 字典数组?

ios - 使用 JSON 数据填充 UILabel 并编码 URL

javascript - Jquery 单击跨度时展开折叠表格的下一行

javascript - AJAX 成功后如何刷新 div 元素?

javascript - 在索引数组中查找值

javascript - AngularJS 改进嵌套数组的过滤

java - Java中的可变长度(动态)数组