如何比较一个数组中多个对象的属性值?我在数组x中有一些对象。
x
var arr = [{a:1, b:2, c:3, d:4}, {a:1, x:2, y:3, z:4}, ...]
如果数组中所有对象的'a'的值都相同,则返回true
'a'
p5cysglq1#
要检查所有对象是否包含相同键的相同值,可以使用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); }));
lf5gs5x22#
我会使用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并进行简单的反转:
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属性不相符。将略过索引为零的项目,并将其与本身进行比较(如果索引为0,则index && 1 - 1就是0)。结果将与!进行反转,因此如果没有找到任何项,则会得到true。
0
index && 1 - 1
!
slwdgvem3#
我将简单地使用Array.prototype.every()来测试是否所有对象都将a作为1。
Array.prototype.every()
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
xn1cxnb44#
看起来你可以用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。这是一个fiddle,它显示了
4条答案
按热度按时间p5cysglq1#
要检查所有对象是否包含相同键的相同值,可以使用destructuring assignment获取第一项,并检查实际项。
取一个子串进行比较
ES5版
lf5gs5x22#
我会使用Array.reduce:
如果
a
的值在数组中的所有对象中都相同,那么为了得到true
,我将使用Array.prototype.some
并进行简单的反转:我在这里寻找清单中的第一个项目,其
a
属性与前一个项目的a
属性不相符。将略过索引为零的项目,并将其与本身进行比较(如果索引为0
,则index && 1 - 1
就是0
)。结果将与!
进行反转,因此如果没有找到任何项,则会得到true
。slwdgvem3#
我将简单地使用
Array.prototype.every()
来测试是否所有对象都将a
作为1
。xn1cxnb44#
看起来你可以用Array.prototype.every()来做这个。
它允许您对数组中的每个元素运行测试函数,如果数组中的每个元素都通过测试,则返回true,否则返回false。
编辑:如果要检查所有对象是否具有特性
a
并且所有值是否相等,可以执行以下操作:如果***任何一个***元素通过测试,您也可以使用Array.prototype.some()返回true或false。
这是一个fiddle,它显示了