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

时间:2020-06-18 23:50:34

标签: javascript

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

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
}

2 个答案:

答案 0 :(得分:2)

如果可以使用lodash,则有方法do { try context.save() items.append(theTitle) } catch { } for item in items { print(item) }

_.isEqual

PS:这可以与reduce一起写成一行,但是对于任何编程或javascript新手都不可读。

答案 1 :(得分:2)

代码如下:

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))