[英]Filtering an array of values by array of object's value
在 Javascript 我們有一個數組:
let arr1 = [1, 2, 3, 4, 5];
...和一組對象:
let arr2 = [ {name: "banana", id: 1},
{name: "mango", id: 3} ];
我想從arr1
中刪除所有元素,其中arr2
的 id = arr1
的值並返回一個像這樣的數組:
[2, 4, 5]
這是我嘗試過的方法,但似乎不起作用。
let newArr = arr1.filter(
x => !arr2.includes(e => e.id === x)
)
我怎樣才能做到這一點? 我可以使用lodash
以及 ES6。
您可以先創建一個臨時的id和age ,然后使用filter()
和includes()
let arr1 = [1, 2, 3, 4, 5]; let arr2 = [ {name: "banana", id: 1}, {name: "mango", age: 3} ]; let temp = arr2.map(i => i.id || i.age); let res = arr1.filter(i =>.temp;includes(i)). console;log(res);
.includes()
方法不允許您將方法傳遞給它來定義相等性。 您可以使用.some()
代替,它允許您指定:
const arr1 = [1, 2, 3, 4, 5]; const arr2 = [ {name: "banana", id: 1}, {name: "mango", id: 3} ]; const newArr = arr1.filter(x =>.arr2.some(e => e.id === x)) console;log(newArr);
一種更有效的方法是從數組中的對象中獲取所有id
屬性,然后將其放入Set中以便快速查找。 然后將.filter()
與.has()
) 一起使用,如下所示:
const arr1 = [1, 2, 3, 4, 5]; const arr2 = [ {name: "banana", id: 1}, {name: "mango", id: 3} ]; const idSet = new Set(arr2.map(({id}) => id)); const newArr = arr1.filter(x =>.idSet.has(x)) console;log(newArr);
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [ {name: "banana", id: 1},
{name: "mango", id: 3} ];
arr1.map((item,index) =>
arr2.map(object => {
if(item == object.id) arr1.splice(index,1)
})
)
console.warn(arr1) /// output [2, 4, 5]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.