如何比较数组的多个对象中的 属性 值?
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}, ...]
我想比较 return 如果 '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
。
要检查所有对象是否包含相同键的相同值,您可以使用 destructuring assignment 获取第一个项目并检查实际项目。
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]) => a.a.toString().slice(0, 3) === b.a.toString().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 a.a.toString().slice(0, 3) === b[0].a.toString().slice(0, 3);
}));
我会简单地使用 Array.prototype.every()
来测试是否所有对象都具有 a
作为 1
。
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()。
它允许您 运行 对数组中的每个元素执行测试函数,如果数组中的每个元素都通过,则 return 为真,否则 return 为假。
编辑:如果您想检查所有对象是否具有 属性 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()到return真或假考试。
这里有一个 fiddle 显示案例
如何比较数组的多个对象中的 属性 值?
我在数组 x
.
var arr = [{a:1, b:2, c:3, d:4}, {a:1, x:2, y:3, z:4}, ...]
我想比较 return 如果 '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
。
要检查所有对象是否包含相同键的相同值,您可以使用 destructuring assignment 获取第一个项目并检查实际项目。
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]) => a.a.toString().slice(0, 3) === b.a.toString().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 a.a.toString().slice(0, 3) === b[0].a.toString().slice(0, 3);
}));
我会简单地使用 Array.prototype.every()
来测试是否所有对象都具有 a
作为 1
。
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()。
它允许您 运行 对数组中的每个元素执行测试函数,如果数组中的每个元素都通过,则 return 为真,否则 return 为假。
编辑:如果您想检查所有对象是否具有 属性 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()到return真或假考试。
这里有一个 fiddle 显示案例