美好的一天。 我有
array a = [
{a:1, value: 2},
{a:2, value: 2},
{a:3, value: 2}
]
如何检查所有对象是否具有相同的值return true
,如果在一个对象中我具有不同的值return false.
答案 0 :(得分:1)
只需对照其他所有值检查第一个值即可。
var array = [{ a: 1, value: 2 }, { a: 2, value: 2 }, { a: 3, value: 2 }],
result = array.every(({ value }, _, a) => a[0].value === value);
console.log(result);
答案 1 :(得分:1)
另一个选择是使用new Set()
获取所有唯一值。如果唯一值只有一个,则表示所有值都相同。
let a = [{a:1, value: 2},{a:2, value: 2},{a:3, value: 2}];
let result = [...new Set(a.map(o => o.value))].length === 1;
console.log(result);
按照Nina的建议,为减少开销,您可以:
let a = [{a:1, value: 2},{a:2, value: 2},{a:3, value: 2}];
let result = new Set(a.map(o => o.value)).size === 1;
console.log(result);
答案 2 :(得分:0)
有build int函数every
。您将谓词传递给它,并且如果每个项目都满足谓词,则返回true
,否则返回false
。
const arr = [{a:1, value: 2},{a:2, value: 2},{a:3, value: 2}];
const result = arr.every(item => item.value === 2);
console.log(result);
答案 3 :(得分:0)
您还可以使用简单的逻辑,使用for
来确定value
是否匹配。另外,创建一个可重用的函数isMatch(arr)
,以便可以将其重用于具有相同结构的多个数组。
function isMatch(arr){
var val = arr[0].value;
var match = true;
for(var i=1; i<arr.length; i++){
if(val !== arr[i].value){
match = false;
break;
}
}
return match;
}
var a = [{a:1, value: 2},{a:2, value: 2},{a:3, value: 2}];
console.log(isMatch(a));
a = [{a:1, value: 2},{a:2, value: 3},{a:3, value: 2}];
console.log(isMatch(a));
答案 4 :(得分:0)
人们建议使用every
,但我建议使用some
:every
遍历数组的所有项,而当谓词为some
时停在该项假。在您的示例中,这并没有太大变化,但是在大型设备上,它可以提高性能。
尝试这样的事情:
const arr = [{a:1, value: 2}, {a:2, value: 2}, {a:3, value: 2}];
const value = arr[0].value;
const areEqual = arr.some(arrItem => arrItem.value === value);
console.log('are all equal : ', areEqual);
答案 5 :(得分:0)
对于我的问题,请帮助此答案
var answer = new Set(a.map(({value}) => value)).size === 1;