我知道这已经被问过了,但是我似乎找不到答案,如何用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)))
答案 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)