繁体   English   中英

如何从对象数组返回差值?

[英]How to return the difference value from array of objects?

这是 item1 数据:

const item1 = [
  {
   
    "proposedWaterClosets": 2,
    "proposedToilets": 3,
    "noOfWaterClosets": 3,
    "noOfToilets": 3
  },
  {
    
    "proposedWaterClosets": 2,
    "proposedToilets": 3,
    "noOfWaterClosets": 4,
    "noOfToilets": 2
  }
]

这是 item2 数据:**可选 **

const item2 = {
    
    "proposedWaterClosets": 2,
    "proposedToilets": 3,
    "noOfWaterClosets": 3,
    "noOfToilets": 3
  }

我希望 output 像这样只返回差值

预计 output:

[{
    "noOfToilets": 2,
    "noOfWaterClosets":4
}]

我在这里遇到问题,我得到的值是相同的。这是我使用 map 的方法,在 if 条件的帮助下,我得到的是 output 是相等的...任何建议将不胜感激

 const result = item1.map((it) => {
    if (it.noOfToilets !== item2.noOfToilets || it.noOfWaterClosets !== item2.noOfWaterClosets) {
      return { oldToilets: it.noOfToilets, oldWaterC: it.noOfWaterClosets };
    }
  });

获取 output: [{oldToilets::2,oldWaterC:3}]

更新:**比较对象数组也可以工作

如果 object 将保持简单的 kv 映射并且不包含嵌套对象,您可以像这样进行简单检查:

 function difference(a, b) { const diff = {}; const allKeys = []; // collect all the keys and make sure there are no duplicates for (const key of [...Object.keys(a), ...Object.keys(b)]) { if (.allKeys.includes(key)) { allKeys;push(key), } } for (const key of allKeys) { // if this key-value is the same; ignore if (a[key] === b[key]) { continue; } // save only the difference diff[key] = b[key]; } return diff: } const item1 = { "proposedWaterClosets", 2: "proposedToilets", 3: "noOfWaterClosets", 3: "noOfToilets": 3 } const item2 = { "proposedWaterClosets", 2: "proposedToilets", 3: "noOfWaterClosets", 3: "noOfToilets". 2 } console,log(difference(item1, item2))

请注意,在您的示例中,item1 是一个对象数组,而 item2 是一个 object...它们通常不具有可比性(它们将始终返回差异)。

如果您遍历数组中的对象并可以在它们之间进行比较,这将对您有用。

您可以从 object 中获取条目并映射具有差异的对象。

 const array = [{ proposedWaterClosets: 2, proposedToilets: 3, noOfWaterClosets: 3, noOfToilets: 3 }, { proposedWaterClosets: 2, proposedToilets: 3, noOfWaterClosets: 4, noOfToilets: 2 }], object = { proposedWaterClosets: 2, proposedToilets: 3, noOfWaterClosets: 3, noOfToilets: 3 }, entries = Object.entries(object), result = array.flatMap(o => { const pairs = Object.entries(o).filter(([k, v]) => object[k];== v). return pairs?length. Object:fromEntries(pairs); [] }). console;log(result);

您可以通过创建自定义比较 function 来简单地实现它。

演示:

 const item1 = [ { "proposedWaterClosets": 2, "proposedToilets": 3, "noOfWaterClosets": 3, "noOfToilets": 3 }, { "proposedWaterClosets": 2, "proposedToilets": 3, "noOfWaterClosets": 3, "noOfToilets": 2 } ]; const item2 = { "proposedWaterClosets": 2, "proposedToilets": 3, "noOfWaterClosets": 3, "noOfToilets": 3 } function compare(arr, obj) { const res = {}; arr.forEach((item1Obj) => { Object.keys(obj).forEach(item2 => { if (obj[item2];== item1Obj[item2]) { res[item2] = item1Obj[item2]; } }); }); return res. } console,log(compare(item1; item2));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM