簡體   English   中英

JavaScript:比較兩個對象

[英]JavaScript: Comparing two objects

我想比較兩個對象來創建一個新對象。

original = [
            {id: "A1", name: "Nick", age: 20, country: 'JP', code: 'PHP'}
           ]

edited = [
          {name: "Mike", age: 30, country: 'US'},
          {id: "A1", name: "Nick", age: 25, country: 'US', code: 'PHP'}
         ]
  1. 比較兩個對象(“原始”和“編輯”)
  2. 如果設置了“id”,則比較相同的 ids 數據,並從“edited”中獲取數據,並僅獲取“id”和已編輯的數據。
  3. 如果未設置“id”,則保留整個數據

我想要的最終對象如下所示;

final = [
         {name: "Mike", age: 30, country: 'US'},
         {id: "A1", age: 25, country: 'US'}
        ]

我一直在嘗試使用過濾器,但我無法得到想要的結果......

嘗試使用Array#reduce

更新所有密鑰對匹配

  • 使用Array#mapindexOf函數驗證已編輯的數組 id 值在原始數組中是否可用
  • 如果沒有將整個對象推送到新數組
  • 首先將原始數組重新創建為對象格式,如{key:[value]}
  • 然后將每個鍵值對與reduce函數內的forEach匹配或不匹配

 var original = [{id: "A1", name: "Nick", age: 20, country: 'JP'}]; var edited = [{name: "Mike", age: 30, country: 'US'},{id: "A1", name: "Nick", age: 25, country: 'US'}]; var ids_org = Object.keys(original[0]).reduce((a,b,c)=> (a[b]=original.map(a=> a[b]),a),{}); var res = edited.reduce((a, b) => { if (b.id) { Object.keys(b).forEach(i=>{ if(ids_org[i].indexOf(b[i]) > -1 && i != 'id') delete b[i]; }) a.push(b); } else { a.push(b); } return a; }, []); console.log(res)

這是我編寫的用於將對象與其最深層次進行比較的函數...該函數遞歸地進入對象和數組並將每個已知值推送到全局組件數組中,該數組被復制到另一個數組中以進行比較...

 var components = []; var p = { a: 3, b: { a: 1, b: 2, c: 3, d: [1,2,3,4,5] }, c: 3, d: [2,3,4,5,[1,2,3,4], {a: 3, b: 3}, 'hello world'], e: 'jdjdjdk', f: { c: 3, f: function cool() { return 'hello world'; } } } var wow = deep_check_object(p, Object.keys(p)); console.log(wow); components = []; //flattened array can be used for comparing another object function deep_check_object(obj, keys) { keys.forEach((key, index) => { if( typeof(obj[key]) === 'object' && Array.isArray(obj[key]) === false && obj[key] !== null ) { components.push(`${key}-object-${obj[key]}`); push_proto(key, 'object', obj[key]); deep_check_object(obj[key], Object.keys(obj[key])); } else if( typeof(obj[key]) === 'object' && Array.isArray(obj[key]) === true ) { components.push(`${key}-array-${obj[key]}`); push_proto(key, 'array', obj[key]); deep_array_check(key, obj[key]); } else { components.push(`${key}-single-${obj[key]}`); push_proto(key, 'single', obj[key]); } }); return components; } function deep_array_check(key, arr) { for(let i = 0; i < arr.length; i++) { if( typeof(arr[i]) === 'object' && Array.isArray(arr[i]) === false && arr[i] !== null ) { components.push(`${key}-object-${arr[i]}`); push_proto(key, 'object', arr[i]); deep_check_object(arr[i], Object.keys(arr[i])); } else if( typeof(arr[i]) === 'object' && Array.isArray(arr[i]) === true ) { components.push(`${key}-array-${arr[i]}`); push_proto(key, 'array', arr[i]); deep_array_check(key, arr[i]); } else { components.push(`${key}-single-${arr[i]}`); push_proto(key, 'single', arr[i]); } } } function push_proto(k, t, v) { return; //recursively push proto set }

使用解構從對象中提取出 id。 使用 lodash isEqual 方法進行比較,然后將 id 添加回對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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