首页 > 解决方案 > 通过匹配值组合对象数组

问题描述

我想组合两个对象数组,以使我更容易在 HTML 中显示。该函数应在 arr1 中找到名为“id”的键的匹配值,并在 arr2 中找到名为“source”的键的匹配值。这是它的样子:

   let arr1 = [
   {id = 1,
   name = "Anna"},

   {id = 2,
   name = "Chris"}
   ]

   let arr2 = [
   {childName = "Brian",
   {source = 1}},
   {childName = "Connie",
   {source = 2}}
   {childName = "Dory",
   {source = 1}}
   ]

我尝试了不同的方法,最好的方法是使用 forEach 并在数组上进行过滤。我正在尝试在名为“children”的 arr1 对象中设置一个新属性。

  arr1.forEach(el => el.children = arr2.filter(checkMatch));

            function checkMatch(child){
                for(let i=0;i<arr1.length;i++){
                    child.childName.source === arr1[i].id
                }
            }

这导致向第一个对象添加适当的孩子(安娜现在有布莱恩和多莉)所以它是正确的,但它也将相同的孩子添加到第二个对象(所以克里斯也有布莱恩和多莉)。我的错误在哪里?我猜这个循环没有按照我想要的方式工作,但我不知道是哪一个以及它是如何发生的。

标签: javascriptajax

解决方案


由于您创建 arr1 和 arr2 对象的语法无效,我试图猜测您的对象的结构。

let arr1 = [
  {
    id: 1,
    name: "Anna"
  },
  {
    id: 2,
    name: "Chris"
  }
];

let arr2 = [
  {
    childName: "Brian",
    source: 1
  },
  {
    childName: "Connie",
    source: 2
  },
  {
    childName: "Dory",
    source: 1
  }
];

arr2.map((child) => {
  for (let parent of arr1) {
    if (parent.id == child.source) {
      if (!parent.children) {
        parent.children = [];
      }
      parent.children.push(child);
    }
  }
});

console.log(arr1);


推荐阅读