【问题标题】:Compare each item in an array of objects比较对象数组中的每个项目
【发布时间】:2021-10-25 04:43:21
【问题描述】:

我有一个对象数组:

   const array = [{ 
    "colour": "red",
    "job": "student",
    "title": "Mr",
},
 {​
    "colour": "green",
    "job": "student",
    "title": "",
},
{​
    "colour": "",
    "job": "teacher",
    "title": "Mr",
},  
{​
    "colour": "red",
    "job": "student",
    "title": "Mr",
}}]

我想比较数组中的对象。

到目前为止,我所拥有的似乎并不高效,因为我将比较索引 i=1j=2i=2j=1,它们正在比较完全相同的对象。我正在使用 Lodash _.isEqual() 来比较对象。

 const handleArrayItems = () => {
    for (let i = 0; i <= array.length; i++) {
        for (let j = 1; j < array.length; j++) {
            if (j === i) {
                continue; //to avoid comparing same object
            }
            if (_.isEqual(array[j],array[i])) {
                return true;
            }
        }
    }   
 };

根据上面返回的内容,将其传递到 if/else 语句中。

if (handleArrayItems()) {
  console.log("found a duplicate item in array")
}

【问题讨论】:

  • 预期输出是什么?
  • handleArrayItems() 如果匹配则返回 true,如果没有对象项相同则返回 false

标签: javascript arrays ecmascript-6


【解决方案1】:

单独的对象不相等。

if (_.isEqual(array[j] === array[i])) {

将首先评估参数:

array[j] === array[i]

这是false,导致:

if (_.isEqual(false)) {

这不起作用。

您需要将两个值都传递给isEqual 进行比较

if (_.isEqual(array[j], array[i])) {

以便 Lodash 可以自己比较这些值。

【讨论】:

    【解决方案2】:

    使ji+1 变为array.length 进行两次比较。

    i 只能转到length-1,因为j 会走到最后。

    for (let i = 0; i <= array.length-1; i++) {
        for (let j = i+1; j < array.length; j++) {
    

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2018-12-30
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多