【问题标题】:How to check if all objects in an array contains same keys and values?如何检查数组中的所有对象是否包含相同的键和值?
【发布时间】:2023-03-08 18:03:01
【问题描述】:

如何检查数组中的所有对象是否包含相同的键和值

const arrOfObjects = [{a: 1, b: 2}, {a: 1, b: 2}, {a:1, b: 2 }] // true

const arrOfObjects = [{a: 1, b: 2}, {a: 1, b: 2}, {a:2, b: 1 }] //false

const arrOfObjects = [{a: 1, b: 2}, {a: 1, b: 2, c: 3}, {a:2, b: 1 }] //false

这是我的试用版,看起来如此丑陋和糟糕并且无法正常工作,如果有人为该问题提供有效的代码,我将不胜感激!

function test(arr){

   const firstItem = arr[0];
   const firstItemKeys = Object.keys(firstItem);

   for(let i = 0; i < firstItemKeys.length; i++) {
      for(let j = 0; j < arr.length; j++) {
         for(let x in arr[j]) {
             if(arr[j][x] !== firstItem[firstItemKeys[i]]) return false
         }
       }
   }

   return true
}

【问题讨论】:

  • 查看stackoverflow.com/questions/201183/… 了解检查对象是否相等的方法。然后在循环中使用其中一种技术。
  • 这个问题的一些重要限制:外部库是否可以接受?对象是否总是单层深度,或者它们可能是嵌套的?您能否确认值是否始终是标量值?这些将是满足您的要求的重要考虑因素。
  • @AlexanderNied 不,我不想使用库,也没有嵌套对象和值并不总是标量

标签: javascript


【解决方案1】:

代码如下:

const arrOfObjects = [
  { a: 1, b: 2 },
  { a: 1, b: 2 },
  { b: 2, a: 1 },
]
function areEquals(a, b) {
  var keys1 = Object.keys(a)
  var keys2 = Object.keys(b)
  if(keys1.length !== keys2.length) {
    return false ;
  }
  for(key in a) {
    if(a[key] !== b[key])  return false;
  }
  return true ;
}
function checkArray(arr) {
  for (var i = 1; i < arr.length; i++) {
    if (!areEquals(arr[0], arr[i])) return false
  }
  return true
}
console.log(checkArray(arrOfObjects))

【讨论】:

  • 如果你在{ b: 2, a: 1 }这样的一个对象中切换ab的位置,它将返回false
  • 是的,我在看到你@Armamedia 的那一刻就写了这条评论
  • @EhsanNazeri 如果您有[{a: 1, b: 2}, {a: 1, b: 2, c: 3}, {a:2, b: 1 }] like this. just FYI,这将无法作为OP 工作@
【解决方案2】:

如果你可以使用lodash,那么有方法_.isEqual

const _ = require('lodash')
const arrOfObjects = [{a: 1, b: 2}, {a: 1, b: 2}, {a:1, b: 2 }]
let isEqual = true
arrOfObjects.forEach(obj => {
  if (!_.isEqual(arrOfObjects[0], obj)) {
    isEqual = false
  } 
})

return isEqual

PS:这可以用 reduce 写成一行,但对于编程或 javascript 的新手来说,这将无法阅读。

【讨论】:

  • 不幸的是,用户在 cmets 中指出外部库是不可接受的。
  • OP 说他确实想使用库。所以这无济于事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2023-03-26
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
相关资源
最近更新 更多