Javascript Typescript按数组筛选对象数组
我必须过滤一个对象数组,以根据另一个数组和另一个数组获得某些值 数据Javascript Typescript按数组筛选对象数组,javascript,Javascript,我必须过滤一个对象数组,以根据另一个数组和另一个数组获得某些值 数据 var value:any[] var inventory = [ {id: 1, quantity: 2, GroupId: 1}, {id: 2, quantity: 0, GroupId: 2}, {id: 1, quantity: 2, GroupId: 1} ]; //data from db value = [1,2] 我的代码 var d
var value:any[]
var inventory = [
{id: 1, quantity: 2, GroupId: 1},
{id: 2, quantity: 0, GroupId: 2},
{id: 1, quantity: 2, GroupId: 1}
];
//data from db
value = [1,2]
我的代码
var data = this.inventory .filter(x => x.GroupId == this.value );
无法获取筛选后的数据,但返回空数组。提前感谢您可以直接使用变量并使用
var inventory=[{id:1,数量:2,GroupId:1},{id:2,数量:0,GroupId:2},{id:3,数量:2,GroupId:1}],
值=[1,2],
data=inventory.filter(({GroupId})=>value.includes(GroupId));
控制台日志(数据)代码>
。作为控制台包装{max height:100%!important;top:0;}
在您的代码中,您正在将GroupId
与数组进行比较。您应该检查数组是否包含GroupId
以下是如何做到这一点:
var data = this.inventory.filter(x => value.includes(x.GroupId));
为获得更好的支持,您可以替换为:
您应该使用includes
console.log([
{id:1,数量:2,组id:1},
{id:2,数量:0,组id:2},
{id:3,数量:2,组id:1}
].filter(x=>[1,2]。包括(x.id))代码>如果您想通过id字段区分,这里有一个解决方案:
var inventory = [
{id: 1, quantity: 2, GroupId: 1},
{id: 2, quantity: 0, GroupId: 2},
{id: 1, quantity: 2, GroupId: 1}
];
var value = [1,2]
var data = inventory.filter(x => value.indexOf(x.GroupId)>-1).filter((elem1, pos, arr) => arr.findIndex((elem2)=>elem2.id === elem1.id) === pos);
console.log(data);
jsidle示例:库存是否在这个范围内?您将其声明为var inventory
,因此它应该是inventory。筛选器(..
包括显示错误,如“属性”包含“在任何[]类型中不存在”这是否回答了您的问题?包括显示错误,如“属性”包含“在任何[]类型中不存在”使用indexOf而不是includes。我更新了答案。这是有效的,但我想更好地解释它为什么有效。例如,为什么我需要-1
?为什么我甚至需要所有东西,包括和之后的内容。findIndex
,我认为这就是过滤器所做的事情。-1
很重要,没有它,code产生了一个重复的清单数组
,但为什么?!@RinandLen:我重构了示例代码并添加了代码注释。我希望它能帮助您更好地理解发生了什么:
var inventory = [
{id: 1, quantity: 2, GroupId: 1},
{id: 2, quantity: 0, GroupId: 2},
{id: 1, quantity: 2, GroupId: 1}
];
var value = [1,2]
var data = inventory.filter(x => value.indexOf(x.GroupId)>-1).filter((elem1, pos, arr) => arr.findIndex((elem2)=>elem2.id === elem1.id) === pos);
console.log(data);