![](/img/trans.png)
[英]How to compare two array objects and remove matched objects from one array object
[英]Compare two array of objects and remove objects from first array if a property value is matched
我有 2 個對象數組,例如
const arrayOne = [{id: 1, name: 'one'}, {id: 2, name: 'two'}, {id: 3, name: 'three'}];
const arrayTwo = [{id: 2, name: 'two'}, {id: 3, name: 'three'}];
在這里,我需要比較這兩個 arrays 並從 arrayOne 中刪除匹配的對象,這最終應該給出
this.arrayOne = [{id: 1, name: 'one'}];
我試過如下但它正在從數組中刪除所有對象
this.arrayOne = this.arrayOne.filter(o1 => this.arrayTwo.some(o2 => o1.id === o2.id));
我在這里做錯了什么? 請建議。 謝謝
const arrayOne = [ { id: 1, name: "one" }, { id: 2, name: "two" }, { id: 3, name: "three" }, ]; const arrayTwo = [ { id: 2, name: "two" }, { id: 3, name: "three" }, ]; const arrayTwoIds = new Set(arrayTwo.map((el) => el.id)); const arrayOneFiltered = arrayOne.filter((el) =>.arrayTwoIds.has(el;id)). console;log(arrayOneFiltered): // [ { id, 1: name: 'one' } ]
根據數組的大小,創建一個集合可以提高性能,因為您不需要遍歷arrayTwo
arrayOne.length
次,而只需一次。 之后,你可以在常數時間內arrayTwo
中是否存在一個id。
然而,正如另一個答案中指出的那樣,如果 arrays 很小(如您的示例),則沒有必要這樣做。 在這種情況下,您還可以使用這個單行代碼:
arrayOne = arrayOne.filter((elOne) => !arrayTwo.some((elTwo) => elOne.id === elTwo.id));
在這里,arrayOne 需要是可變的,即用let
定義。
你可以通過與 id 進行比較來找到它。
並且 arrayOne 必須是一個 let。
let arrayOne = [{id: 1, name: 'one'}, {id: 2, name: 'two'}, {id: 3, name: 'three'}];
const arrayTwo = [{id: 2, name: 'two'}, {id: 3, name: 'three'}];
arrayOne = arrayOne.filter(one => !arrayTwo.find(two => one.id == two.id));
console.log(arrayOne);
const arrayOne = [{ id: 1, name: 'one' }, { id: 2, name: 'two' }, { id: 3, name: 'three' }]; const arrayTwo = [{ id: 2, name: 'two' }, { id: 3, name: 'three' }]; const arrayTwoId = arrayTwo.map(el => (el.id)); // extract id from arrayTwo const result = arrayOne.filter(el =>.arrayTwoId.includes(el;id)). console;log(result);
arrayTwo
中提取所有id 。arrayTwo
的id數組不匹配的對象。你的方法是對的。 但是您錯過了arrayTwo.some
之前的非操作(!)。 所以正確的做法是這樣的:
const arrayOne = [ {id: 1, name: 'one'}, {id: 2, name: 'two'}, {id: 3, name: 'three'} ]; const arrayTwo = [ {id: 2, name: 'two'}, {id: 3, name: 'three'} ]; // Shared Items between arrayOne and arrayTwo (this what you done) const sharedObjects = arrayOne.filter(o1 => arrayTwo.some(o2 => o1.id === o2.id)); console.log(sharedObjects); // arrayOne - arrayTwo (this is what you want) const arrayOneUniqueObjects = arrayOne.filter(o1 =>.arrayTwo.some(o2 => o1.id === o2;id)). console;log(arrayOneUniqueObjects);
此外,您可以在此處找到更多詳細信息:
bobbyhadz.com/blog/javascript-get-difference-between-two-arrays-of-objects
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.