繁体   English   中英

如何比较数组的多个对象中的属性值?

[英]How to compare a property value in multiple objects of an array?

如何比较数组的多个对象中的属性值? 我在数组x有一些对象。

var arr = [{a:1, b:2, c:3, d:4}, {a:1, x:2, y:3, z:4}, ...]

我想比较并返回true,如果'a'的值在数组中的所有对象中相同

我会使用Array.reduce

const data1 = [{a:1, b:2, c:3, d:4}, {a:1, x:2, y:3, z:4}];
const data2 = [{a:1, b:2, c:3, d:4}, {a:1, x:2, y:3, z:4}, {a: 2}];

data1.reduce((acc, item) => acc && item.a === 1, true); // true
data2.reduce((acc, item) => acc && item.a === 1, true); // false

为了在数组中的所有对象中a的值相同时获得true ,我将使用具有简单反演的Array.prototype.some

!data1.some((item, index, list) => item.a !== list[index && 1 - 1].a); // true
!data2.some((item, index, list) => item.a !== list[index && 1 - 1].a); // false

在这里,我在寻找一个具有列表中的第一个项目a不匹配属性a上一个项目的属性。 零索引项将被跳过,它会相比有自身( index && 1 - 1就是0 ,如果指数为0 )。 结果是倒了! ,如果找不到任何物品,我都true

为了检查所有对象是否包含相同键的相同值,您可以使用解构分配来获取第一个项目并检查实际项目。

 var array = [{ a: 1, b: 2, c: 3, d: 4 }, { a: 1, x: 2, y: 3, z: 4 }], key = 'a'; console.log(array.every((a, _, [b]) => a[key] === b[key])); 

采用子串进行计算

 var array = [{ a: 12345, b: 2, c: 3, d: 4 }, { a: 12367, x: 2, y: 3, z: 4 }]; console.log(array.every((a, _, [b]) => aatoString().slice(0, 3) === batoString().slice(0, 3))); 

ES5

 var array = [{ a: 12345, b: 2, c: 3, d: 4 }, { a: 12367, x: 2, y: 3, z: 4 }]; console.log(array.every(function (a, _, b) { return aatoString().slice(0, 3) === b[0].a.toString().slice(0, 3); })); 

我会简单的使用Array.prototype.every()来测试,如果所有的对象都有a1

 var arr = [{a:1, b:2, c:3, d:4}, {a:1, x:2, y:3, z:4}, {a:1, x:2, y:3, z:4}]; let result = arr.every((obj)=> obj.a === 1); console.log(result);//true arr = [{a:1, b:2, c:3, d:4}, {a:1, x:2, y:3, z:4}, {a:2, x:2, y:3, z:4}]; result = arr.every((obj)=> obj.a === 1); console.log(result);//false //Checks whether all the a keys is same in the array of objects. result = arr.every((obj)=> obj.a === arr[0].a); console.log(result); //false arr = [{a:1, b:2, c:3, d:4}, {a:1, x:2, y:3, z:4}, {a:1, x:2, y:3, z:4}]; result = arr.every((obj)=> obj.a === arr[0].a); console.log(result); //true 

看起来你可以使用Array.prototype.every()

它允许您对数组中的每个元素运行测试函数,如果数组中的每个元素都通过则返回true,否则返回false。

编辑:如果您想检查所有对象是否具有属性a并且所有值都相等,则可以执行以下操作:

const x = [{a:1, b:2, c:3, d:4}, {a:1, x:2, y:3, z:4}, {a:2, g:33, f:100}];
let condition = x.every( elem => elem.a == x[0].a);

如果任何一个元素通过测试,您也可以使用Array.prototype.some()返回true或false。

这是一个显示案例的小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM