通过将对象键匹配到值来映射两个单独的数组

时间:2020-10-02 20:48:21

标签: javascript arrays object

在整个晚上都een不休,看不到解决方案。

简单地放入

我正在从两个单独的API查询两个数组。

它们以以下格式返回数据:

API 1

[{
  balance: 4444,
  age: "18",
  gender: "Male",
  level: "2",
  name: "Joe"
  
}, {
  balance: 3333,
  age: "45",
  gender: "Male",
  level: "3",
  name: "Angel"
}
}]

API 2

{
  Joe: {
    score: 32
  },
  Angel: {
    score: 22
  }
}

我需要将第二个API中的对象键与第一个API中的playerInfo的名称值进行匹配,以便创建一个完全平坦的新数组,如下所示:

[{
  balance: 4444,
  age: "18",
  gender: "Male",
  level: "2",
  name: "Joe",
  score: 32
  
}, {
  balance: 3333,
  age: "45",
  gender: "Male",
  level: "3",
  name: "Angel",
  score: 22
}
}]

此刻我正在这里被石墙包围

var result = []

const matchKeys = (data, data1) => {    
  let arr = []
  arr.push(data1)

  data.map(item => {
    arr.map(item1 => {
      if (item.name === Object.keys(item1)) {
        result.push(Object.assign(item, item1))
        console.log(result)
      }
    })
  })
}

matchKeys(api1, api2)

我怀疑我距离不远,因为我没有正确访问我的第二个数据集,因为没有索引可以跟踪我应该与数组中的对应值配对的对象。

感谢任何帮助

2 个答案:

答案 0 :(得分:1)

您可以使用Array.map来实现。

const input1 = [{
  balance: 4444,
  age: "18",
  gender: "Male",
  level: "2",
  name: "Joe"
}, {
  balance: 3333,
  age: "45",
  gender: "Male",
  level: "3",
  name: "Angel"
}];

const input2 = {
  Joe: {
    score: 32
  },
  Angel: {
    score: 22
  }
}

function matchKeys(arr1, arr2) {
  const result = arr1.map((item) => {
    if (input2[item.name]) {
      return { ...item, ...input2[item.name] };
    }
    return item;
  });
  return result;
}

console.log(matchKeys(input1, input2));

答案 1 :(得分:0)

您可以使用第二个对象的属性来搜索正确的名称。

const input1 = [{
  balance: 4444,
  age: "18",
  gender: "Male",
  level: "2",
  name: "Joe"
}, {
  balance: 3333,
  age: "45",
  gender: "Male",
  level: "3",
  name: "Angel"
}];

const input2 = {
  Joe: {
    score: 32
  },
  Angel: {
    score: 22
  }
}

const matchKeys = (data, data1) => {
  return data.map((item) => ({ ...item, score: data1[item.name] ? data1[item.name].score : 0 }));
}

console.log(matchKeys(input1, input2));

还检查了它的名字,以及由于某种原因我没有插入默认分数。

相关问题