簡體   English   中英

比較數組的值和對象數組的鍵

[英]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); 

Doc: filter()find()

您可以使用過濾器檢查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.

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