javascript - Java脚本过滤对象数组并将结果的一个元素推送到另一个数组

标签 javascript arrays ecmascript-6

我有一个名为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]

最佳答案

你可以试试这个。它使用“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'))

关于javascript - Java脚本过滤对象数组并将结果的一个元素推送到另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53222609/

相关文章:

javascript - 如何从过滤器的过滤器返回值?

javascript - jQuery + Full Page + Mobile Menu closing =Unable to preventDefault inside passive event listener

javascript - 选择页面上的 2 个按钮

javascript - 函数体的解结构变量和变量部分之间的区别

javascript - 检查 Steam 游戏 key 字符串

java - 可以将二维 double 组更改为输出字符串吗?

javascript - 对象 es6 过滤器的双重嵌套数组

javascript - Highcharts x 轴日期时间问题

javascript - 在具有不同边框的 div 上调用函数

java - 量化数组顺序之间的差异