Отображение двух массивов объектов, сопоставление свойств и сохранение конкретной информации в новом массиве - PullRequest
2 голосов
/ 11 октября 2019

плохо знаком с 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
}

^ Это, очевидно, не работает - но мне интересно, будут ли уместны Assign или Filter.

Заранее спасибо за вашу помощь (извиняюсь, что это, вероятно, дурак)!

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Вы можете использовать find () внутри map () , чтобы найти элемент. Это находит элемент, даже если они не имеют одинаковый индекс в обоих массивах.

Затем используйте filter () для фильтрации любых undefined значений, которые будут присутствовать, если нет 't a match.

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);
0 голосов
/ 11 октября 2019
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
  }
})
0 голосов
/ 11 октября 2019

Вы можете использовать карту с условием внутри

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)
...