将嵌套对象字段与Javasacript / Lodash中的数组列表进行比较

时间:2016-12-07 14:28:33

标签: javascript arrays lodash

我有以下两项数据:

用户:

[ 
   {id:1, food:{id:2, name:"coffee"} },
   {id:2, food:{id:3, name:"tea" } },
   {id:3, food:{id:5, name:"salad"} }
]

foodList:

[2,3]

我目前正在使用react,我需要过滤掉用户只显示FoodList数组中带有食物ID的用户。

我在Lodash尝试了类似的东西:

 var filtered = _.some(users.food.id, foodList);

这是不正确的,因为users.food.id无效。有没有办法将嵌套对象数组与javascript中的列表进行比较?

4 个答案:

答案 0 :(得分:2)

您可以使用Array.prototype.filter

const result = users.filter(e => foodList.includes(e.food.id));

MDN documentation

答案 1 :(得分:2)

对于这个问题,有一个很好的简短解决方案,如果你已经使用了lodash,你可以使用它。

使用_.keyBy()对值进行索引,并使用_.at()仅提取footList中的值:



var data = [{ id: 1, food: { id: 2, name: "coffee" } }, { id: 2, food: { id: 3, name: "tea" } }, { id: 3, food: { id: 5, name: "salad" } }]

var foodList = [2,3];

var result = _(data) // start the chain
  .keyBy('id') // index the items by key
  .at(foodList) // get the items
  .value(); // return the result array

console.log(result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

这是一项简单的任务,你可以在没有任何库的情况下完成。您可以使用filter()indexOf()

var data = [ 
   {id:1, food:{id:2, name:"coffee"} },
   {id:2, food:{id:3, name:"tea"} },
   {id:3, food:{id:5, name:"salad"} }
]

var arr = [2,3];
var result = data.filter(e => arr.indexOf(e.food.id) != -1)
console.log(result)

答案 3 :(得分:1)

您可以使用lodash中的_.filter_.includes

&#13;
&#13;
function doGet(e) {  
  var temp = HtmlService.createTemplateFromFile('index');
  temp.name = e.parameters.name;
  return temp.evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
&#13;
var users = [{ id: 1, food: { id: 2, name: "coffee" } }, { id: 2, food: { id: 3, name: "tea" } }, { id: 3, food: { id: 5, name: "salad" } }],
    foodList = [2, 3],
    result = _.filter(users, u => _.includes(foodList, u.food.id));

console.log(result);
&#13;
&#13;
&#13;