Фильтр Java-скрипта для массива объектов и перенос одного элемента результата в другой массив - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть массив с именем data внутри этого массива, у меня есть objects. Структура объекта выглядит следующим образом

{
id:1,
especial_id:34,
restaurant_item:{id:1,restaurant:{res_name:'KFC'}}
}

Я хочу передать res_name, например: - KFC

Я хочу вывод в виде массива, который состоит из всех especial_ids

как это myarr = [12,23,23]

Я мог бы сделать что-то подобное для этого . Но я хочу знать, что является более элегантным способом сделать это.

const data = [
  {id:1,especial_id:6,restaurant_items:{id:5,res_name:'McDonalds'}},
  
  {id:1,especial_id:8,restaurant_items:{id:5,res_name:'Kfc'}},
  
  {id:1,especial_id:6,restaurant_items:{id:5,res_name:'Sunmeal'}},
  
   {id:1,especial_id:6,restaurant_items:{id:5,res_name:'Kfc'}},
];

let temp = data.filter(element => element.restaurant_items.res_name == 'kfc')

let myArr = [];

temp.forEach(element=> myArr.push(element.especial_id));

console.log(myArr)//[8,6]

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Использование Array.reduce

const data = [{id:1,especial_id:6,restaurant_items:{id:5,res_name:'McDonalds'}},{id:1,especial_id:8,restaurant_items:{id:5,res_name:'Kfc'}},{id:1,especial_id:6,restaurant_items:{id:5,res_name:'Sunmeal'}},{id:1,especial_id:6,restaurant_items:{id:5,res_name:'Kfc'}}];

let result = data.reduce((a,c) => {
  if(c.restaurant_items.res_name === 'Kfc') a.push(c.especial_id);
  return a;
},[]);

console.log(result);
0 голосов
/ 09 ноября 2018

Вы можете попробовать это. Он использует «Array.filter» и «Array.map»

var data = [
  {id:1,especial_id:6,restaurant_items:{id:5,res_name:'McDonalds'}},
  
  {id:1,especial_id:8,restaurant_items:{id:5,res_name:'Kfc'}},
  
  {id:1,especial_id:6,restaurant_items:{id:5,res_name:'Sunmeal'}},
  
  {id:1,especial_id:6,restaurant_items:{id:5,res_name:'Kfc'}},
];

function getEspecialIdsByName(name) {
  return data.filter(d => d.restaurant_items.res_name.toLowerCase() == name.toLowerCase())
             .map(d => d.especial_id)
}

console.log(getEspecialIdsByName('Kfc'))

console.log(getEspecialIdsByName('Sunmeal'))
0 голосов
/ 09 ноября 2018

Вы можете reduce выдвинуть элементы, которые проходят тест, в массив аккумуляторов за одну итерацию по вводу:

const data = [
  {id:1,especial_id:6,restaurant_items:{id:5,res_name:'McDonalds'}},
  {id:1,especial_id:8,restaurant_items:{id:5,res_name:'Kfc'}},
  {id:1,especial_id:6,restaurant_items:{id:5,res_name:'Sunmeal'}},
   {id:1,especial_id:6,restaurant_items:{id:5,res_name:'Kfc'}},
];
console.log(
  data.reduce((a, { especial_id, restaurant_items: { res_name }}) => {
    if (res_name === 'Kfc') a.push(especial_id)
    return a;
  }, [])
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...