具有多个数组的过滤器数组

时间:2018-09-28 08:46:09

标签: javascript angular

我知道这已经被问过了,但是我似乎找不到答案,如何用valuearray ..过滤多个数据数组?

var array =[
    {
        id : '123',
        nama : 'name one'
    },
    {
        id : '456',
        nama : 'name one'
    },
    {
        id : '789',
        nama : 'name one'
    },
    {
        id : '012',
        nama : 'name one'
    }
]

var valuearray = [123, 456]

array.filter(r => valuearray.includes(r.id)))

3 个答案:

答案 0 :(得分:3)

您在id中的array值是字符串类型,在valuearray中的值是数字类型,因此除了filter()之外,您还需要使用parseInt() {1}}个值。

id

答案 1 :(得分:2)

您的操作方式是这样的 array.filter(element => valuearray.includes(parseInt(element.id))) 根据您作为示例给出的输入,将在以下数组中得到此结果: [{ id : '123', nama : 'name one' }, { id : '456', nama : 'name one' }]

我在这里使用~运算符看到了几个答案。如果您想知道为什么会这样,那是因为indexOf可能是0。如果过滤函数的结果为0,则该元素将被滤除,因为它是伪造的值。 ~可以防止这种情况。

如果您对~感兴趣,

This应该给您更多信息。


编辑:

如@str所述,valuearray有数字,而id中元素的array是字符串。这就是为什么我们使用parseInt来确保两个比较项(includes函数)具有相同的类型的原因。

答案 2 :(得分:0)

问题在于,在 array 中,每个对象id是字符串,在 valuearray 中,每个对象id是数字。

所以我们需要使用 parseInt 方法转换数字并检查。

var array =[
    {
        id : '123',
        nama : 'name one'
    },
    {
        id : '456',
        nama : 'name one'
    },
    {
        id : '789',
        nama : 'name one'
    },
    {
        id : '012',
        nama : 'name one'
    }
]

var valuearray = [123, 456]


var filteredArray = array.filter(o => valuearray.includes(parseInt(o.id)))


console.log(filteredArray)

相关问题