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);