[英]compare values of an array, with the key of an array of objects
如問題所示,我需要將[1,2,3]
類型的數組的值與對象[{id: 1, name: 'jhon'}, {id: 2 , name: 'max'}]
在這種情況下,我想將其與id鍵的值進行比較,我寫了以下我需要的示例:
如果我有這個對象數組:
[
{
id: 1
name: 'jhon'
},
{
id: 2,
name: 'max'
},
{
id: 3,
name: 'fer'
}
]
我有這個數組:
[1,2,3,4,5]
我需要比較它們並獲取對象數組中不存在的值,在前面的示例中,對象數組中不存在值4和5,因此我需要獲取一個新數組或相同的數組,但是其值不是它們的值, [4,5]
注意:如果我有一個數組,也只能使用不存在的數字,例如[8,9]
,它們也應該返回相同的值,這也應該起作用。
編輯:有可能在新數組中獲得僅存在於對象數組中的那些值。 例如,使用先前代碼的數組:
[{id: 1, name: 'jhon'}, {id: 2, name: 'max'}, {id: 3, name: 'fer'}]
現在此數組將具有以下值[1,4,5]
和先前的答案,我得到以下數組[4,5]
是正確的。 如何獲得新數組中的[2,3]
值。
使用Array.map()
從arr1
的id創建一個Set 。 然后通過檢查Set 是否包含數字來過濾 arr2
:
const arr1 = [{"id":1,"name":"jhon"},{"id":2,"name":"max"},{"id":3,"name":"fer"}]; const arr2 = [1,2,3,4,5]; const arr3 = [1, 5]; const difference = (arr1, arr2, key) => { const arr1Values = new Set(key ? arr1.map(({ [key]: v }) => v) : arr1); return arr2.filter((n) => !arr1Values.has(n)); }; // array of primitives and array of objects console.log(difference(arr1, arr2, 'id')); // two arrays of primitives console.log(difference(arr3, arr2));
您可以使用filter
find
let arr1 = [{id: 1,name: 'jhon'},{id: 2,name: 'max'},{id: 3,name: 'fer'}] let arr2 = [1, 2, 3, 4, 5]; let result = arr2.filter(o => !arr1.find(x => x.id === o)); console.log(result);
更新:這基本上與第一個示例相反。 您過濾arr2
並檢查id是否存在於arr1
。 然后,使用map
返回id
let arr1 = [{id: 1,name: 'jhon'},{id: 2,name: 'max'},{id: 3,name: 'fer'}] let arr2 = [1,4,5]; let result = arr1.filter(o => !arr2.find(x => x === o.id)).map(o=>o.id); console.log(result);
您可以使用過濾器檢查arr2中元素的id屬性是否與arr2中當前元素匹配
const arr1 = [{"id":1,"name":"jhon"},{"id":2,"name":"max"},{"id":3,"name":"fer"}];
const arr2 = [8,9];
var diffArray = arr2.filter(x => !arr1.filter(y => y.id === x).length);
console.log(diffArray);
回答 [8,9]
您可以使用.filter()
和.includes()
:
let arr1 = [{id: 1,name: 'jhon'},{id: 2, name: 'max'},{id: 3,name: 'fer'}], arr2 = [1, 2, 3, 4, 5]; let result = ( ids => arr2.filter(n => !ids.includes(n)) )(arr1.map(({id}) => id)); console.log(result);
描述:
.map()
僅從第一個數組中提取id來創建一個新數組。 .filter()
和.includes()
過濾元素,以僅過濾第二個數組中新創建的數組中不存在的元素。 文件:
您可以使用具有給定ID的集合,然后刪除該對象的ID。 稍后返回帶有剩余ID的數組。
var data = [{ id: 1, name: 'jhon' }, { id: 2, name: 'max' }, { id: 3, name: 'fer' }], ids = [1, 2, 3, 4, 5], result = Array.from(data.reduce((s, { id }) => (s.delete(id), s), new Set(ids))); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.