Javascript 映射两个数组以查看一个属性是否匹配,然后将特定信息推送到第一个数组中

Javascript 映射两个数组以查看一个属性是否匹配,然后将特定信息推送到第一个数组中,javascript,arrays,object,foreach,array.prototype.map,Javascript,Arrays,Object,Foreach,Array.prototype.map,javascript新手,正在努力学习!我试图映射两个对象数组,如果某个属性匹配,则将特定信息拉入第一个数组 let result; let arrNames = [{ id: 10 name: "A" }, { id: 11, name: "B" }, { id: 12, name: "C" }, }, { id: 13, name: "A" }, { id: 14, name: "B" }] let arrInfo = [{ name: "

javascript新手,正在努力学习!我试图映射两个对象数组,如果某个属性匹配,则将特定信息拉入第一个数组

let result;

let arrNames = [{
  id: 10  
  name: "A"
}, {
  id: 11,
  name: "B"
}, {
  id: 12,
  name: "C"
}, }, {
  id: 13,
  name: "A"
}, {
  id: 14,
  name: "B"
}]

let arrInfo = [{
  name: "A",
  info: "AAA"
}, {
  name: "B",
  info: "BBB"
}, {
  name: "C",
  info: "CCC"
}]

如果arrNames.name==arrInfo.name,我希望将信息推送到names数组中

预期结果:

let arrNames = [{
  id: 10  
  name: "A",
  info: "AAA"
}, {
  id: 11,
  name: "B",
  info: "BBB"
}, {
  id: 12,
  name: "C",
  info: "CCC"
}, }, {
  id: 13,
  name: "A",
  info: "AAA"
}, {
  id: 14,
  name: "B",
  info: "BBB"
}]

我所尝试的:

const res = arrInfo.map((el, index) => {
      if(el.name == arrNames[index].name) 
        arrNames.push(el.info)
    }
^这显然不起作用——但我想知道在这里扩展或推是否合适


提前感谢您的帮助(很抱歉,这可能是一个重复)。

arrInfo
转换为a,并将
名称作为键。现在
arrNames
并使用
name
添加从
arrInfoMap
获得的信息。用于组合两个对象:

const arrNames=[{“id”:10,“name”:“A”},{“id”:11,“name”:“B”},{“id”:12,“name”:“C”},{“id”:13,“name”:“A”},{“id”:14,“name”:“B”}]
const arrInfo=[{“name”:“A”,“info”:“AAA”},{“name”:“B”,“info”:“BBB”},{“name”:“C”,“info”:“CCC”}]
const arrInfoMap=新映射(arrInfo.Map(o=>[o.name,o]))
const result=arrNames.map(o=>({…o,…arrInfoMap.get(o.name)}))

console.log(结果)
arrInfo
转换为a,并将
名称
作为键。现在
arrNames
并使用
name
添加从
arrInfoMap
获得的信息。用于组合两个对象:

const arrNames=[{“id”:10,“name”:“A”},{“id”:11,“name”:“B”},{“id”:12,“name”:“C”},{“id”:13,“name”:“A”},{“id”:14,“name”:“B”}]
const arrInfo=[{“name”:“A”,“info”:“AAA”},{“name”:“B”,“info”:“BBB”},{“name”:“C”,“info”:“CCC”}]
const arrInfoMap=新映射(arrInfo.Map(o=>[o.name,o]))
const result=arrNames.map(o=>({…o,…arrInfoMap.get(o.name)}))

console.log(结果)
您可以执行以下操作:

让arrNames=[
{
id:10,
姓名:“A”
},
{
id:11,
姓名:'B'
},
{
id:12,
姓名:“C”
},
{
id:13,
姓名:“A”
},
{
身份证号码:14,
姓名:'B'
}
];
设arrInfo=[
{
名称:‘A’,
信息:“AAA”
},
{
名称:‘B’,
信息:“BBB”
},
{
名称:‘C’,
信息:“CCC”
}
];
//这样做
const result=arrNames.map((项)=>{
const newItem=item;//这里我们定义一个新对象,该对象与当前在arrNames数组中循环到的对象相同
//在当前循环到的对象上循环第二个数组,查看名称是否匹配
arrInfo.forEach((项目2)=>{
if(item.name==item2.name){
newItem.info=item2.info;//如果他们为您的新对象设置了一个名为info的新属性作为此arrInfo数组项2的信息
}
});
//无论name属性是否匹配,都返回此新对象
返回新项目;
});

控制台日志(结果)您可以执行以下操作:

让arrNames=[
{
id:10,
姓名:“A”
},
{
id:11,
姓名:'B'
},
{
id:12,
姓名:“C”
},
{
id:13,
姓名:“A”
},
{
身份证号码:14,
姓名:'B'
}
];
设arrInfo=[
{
名称:‘A’,
信息:“AAA”
},
{
名称:‘B’,
信息:“BBB”
},
{
名称:‘C’,
信息:“CCC”
}
];
//这样做
const result=arrNames.map((项)=>{
const newItem=item;//这里我们定义一个新对象,该对象与当前在arrNames数组中循环到的对象相同
//在当前循环到的对象上循环第二个数组,查看名称是否匹配
arrInfo.forEach((项目2)=>{
if(item.name==item2.name){
newItem.info=item2.info;//如果他们为您的新对象设置了一个名为info的新属性作为此arrInfo数组项2的信息
}
});
//无论name属性是否匹配,都返回此新对象
返回新项目;
});

控制台日志(结果)用谷歌搜索地图、过滤器和forEach。@Ejaz47感谢您的建议。用谷歌搜索地图、过滤器和forEach。@Ejaz47感谢您的建议。谢谢您的帮助!但是,结果只是原始的arrNames数组,没有arrInfo.info。如果密钥不同,这种方法会改变吗(在我的例子中,我尝试将“工作流名称”与“合法权限”匹配,而不是“名称”和“名称”。您可以看到代码片段结果(单击“运行代码片段”)包括
info
字段。更改用于映射键的属性,然后在从映射中获取时使用它。需要注意的是,此解决方案的复杂性为O(n+m)(两个数组的组合长度),而Map+filter或Map+forEach为O(n*m)。回答了我自己的问题。我只是让键保持不变,它工作得很好。再次感谢你!@BWeb303这是一个很好的答案,但是如果你还不熟悉javascript,如果你想在逻辑方面有一个更清晰的方法,请查看我的答案。在这里,OP使用扩展运算符和单行箭头函数,隐式返回函数,当您在地图中使用
push
而不是返回地图创建新数组需要您执行的操作时,您似乎会对该函数感到困惑。您使用
map
就像使用
forEach
循环一样。感谢您的方法!但是,结果只是原始的arrNames数组,没有arrInfo。信息。如果密钥不同,这种方法会改变吗(在我的例子中,我尝试将“工作流名称”与“合法权限”匹配,而不是“名称”和“名称”。您可以看到代码片段结果(单击“运行代码片段”)包括
info
字段。更改用于映射键的属性,然后在从映射中获取时使用它。需要注意的是,此解决方案的复杂性为O(n+m)(两个数组的组合长度),而Map+filter或Map+forEach为O(n*m).回答了我自己的问题。我只是做了同样的钥匙,它工作得很好。再次感谢你!@BWeb303这是一个很好的答案,但是如果你想在逻辑方面更清晰的方法,请查看我的答案,如果你