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
}
解决方案
如果你可以使用 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的新手来说,它是不可读的。
推荐阅读
- c# - 就像在视图中一样,在 C# 中将子对象转换为父对象并返回给子对象
- python - Selenium 和 Python,从 HTML 正文中获取没有任何标签的文本
- pdf - 如何检查 pdf 的编码和 ToUnicode 是否正确完成?
- laravel - 我收到此错误:未捕获的 ReferenceError:当我声明全局变量时未定义 vue
- ruby-on-rails - 只为特定的代码路径调用 after_action
- python - SOAP在python中解码未知的文档流响应
- angular - 如何从静态数组而不是动态用户输入设置 FormControl 名称?
- javascript - 每个用户/产品的新 html、css、js 页面
- jquery - 关于在 cms 的 head 或 body 中声明 jQuery 并遵循官方指南
- html - 尝试访问受保护的视频流时未要求授权- 标签 = 403