簡體   English   中英

按對象值數組過濾值數組

[英]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。

您可以先創建一個臨時的idage ,然后使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM