映射两个对象数组,匹配属性并将特定信息存储在新数组中

Posted

技术标签:

【中文标题】映射两个对象数组,匹配属性并将特定信息存储在新数组中【英文标题】:Map over two arrays of objects, match properties and store specific info in a new array 【发布时间】:2020-02-09 08:20:33 【问题描述】:

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

let result;

let arrNames = [
  name: "A"
, 
  name: "B"
, 
  name: "C"
]

let arrInfo = [
  name: "A",
  info: "AAA"
, 
  name: "B",
  info: "BBB"
, 
  name: "C",
  info: "ccc"
]

如果 arrNames.name == arrInfo.name,我希望结果等于 arrInfo.info。

我尝试过的:

arrNames.map(x => 
if(arrNames.name == arrInfo.name)
   result=arrInfo.info

^ 这显然行不通——但我想知道分配或过滤是否合适。

提前感谢您的帮助(很抱歉这可能是一个骗局)!

【问题讨论】:

当现有答案解决您的原始问题时,请勿修改问题。而是提出一个新问题(我看到您已经这样做了)。回滚到以前的版本。 【参考方案1】:

您可以在map() 中使用find() 来查找元素。即使它们在两个数组中的索引不同,这也会找到元素。

然后使用filter() 过滤任何undefined 值,如果没有匹配项则会出现。

var arrNames = [
   name: "A",
   name: "B",
   name: "C"
];

var arrInfo = [
   name: "A", info: "AAA",
   name: "B", info: "BBB",
   name: "C", info: "ccc"
];

let result = arrNames.map(x => 
  item = arrInfo.find(item => item.name === x.name);
  if (item)  
    return item.info;
        
).filter(item => item !== undefined); // Can also use filter(item => item);

console.log(result);

【讨论】:

【参考方案2】:

您可以使用带有条件的地图

el.name === arrNames[index].name && el.info

意思:

if (el.name === arrNames[index].name) return el.info

let arrNames = [
  name: "A"
, 
  name: "B"
, 
  name: "C"
]

let arrInfo = [
  name: "A",
  info: "AAA"
, 
  name: "B",
  info: "BBB"
, 
  name: "C",
  info: "ccc"
]


const res = arrInfo.map((el, index) => el.name === arrNames[index].name && el.info)

console.log(res)

【讨论】:

【参考方案3】:
let result = [];

arrNames = [
   name: "A",
   name: "B",
   name: "C",
]

arrInfo = [
   name: "A", info: "AAA",
   name: "B", info: "BBB",
   name: "C", info: "ccc",
]

result = arrNames.map(function(_, index)
  if(arrNames[index].name === arrInfo[index].name) 
    return arrInfo[index].info
  
)

【讨论】:

以上是关于映射两个对象数组,匹配属性并将特定信息存储在新数组中的主要内容,如果未能解决你的问题,请参考以下文章

如何映射两个数组并将匹配作为按钮返回?

比较两个对象数组并在新数组中返回匹配值

比较两个对象数组,并将匹配值的元素排除到JS中的新数组中

尝试反序列化 JSON 对象数组,其中对象具有数组作为属性。我可以将数组元素映射到类的特定属性吗?

循环遍历两个字符串数组并将它们设置为对象属性

如何通过敲除映射(ko.utils)向数组中的每个对象添加新属性(索引)?