我有以下两项数据:
用户:
[
{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中的列表进行比较?
答案 0 :(得分:2)
您可以使用Array.prototype.filter
const result = users.filter(e => foodList.includes(e.food.id));
答案 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;
答案 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
。
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;