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

Javascript 如何检查数组中的所有对象是否包含相同的键和值?,javascript,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 这是

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

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
}
功能测试(arr){
常量firstItem=arr[0];
const firstItemKeys=Object.keys(firstItem);
for(设i=0;i
如果您可以使用lodash,那么就有方法
\uq.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新手来说都不可读。

以下是代码:

const arrOfObjects=[
{a:1,b:2},
{a:1,b:2},
{b:2,a:1},
]
函数a等于(a,b){
var keys1=对象。键(a)
var keys2=对象。键(b)
if(keys1.length!==keys2.length){
返回false;
}
用于(输入a){
如果(a[key]!==b[key])返回false;
}
返回true;
}
函数校验数组(arr){
对于(变量i=1;ilog(检查数组(arrOfObjects))
有关检查对象是否相等的方法,请参阅。然后在循环中使用这些技术中的一种。这个问题的一些重要限制:外部库是否可以接受?对象是否始终为单层深,或者是否嵌套?能否确认值是否始终为标量值?这些都是回答您的要求时需要考虑的重要因素。@AlexanderNied不,我不想使用库,也不想嵌套对象和值不总是按比例缩放。用户在评论中指出,外部库是不可接受的。OP说他确实想使用库。如果你在一个对象中切换
a
b
的位置,比如
{b:2,a:1}
,它将返回
false
。是的,我看到你的评论时就在写这个评论@Armamedia@EhsanNazeri如果您有
[{a:1,b:2},{a:1,b:2,c:3},{a:2,b:1}],这将不能像所需的那样工作这样地。仅供参考