检查obj中的字段

时间:2018-06-22 07:23:02

标签: javascript

美好的一天。 我有

array a  = [
            {a:1, value: 2},
            {a:2, value: 2},
            {a:3, value: 2}
           ]

如何检查所有对象是否具有相同的值return true,如果在一个对象中我具有不同的值return false.

6 个答案:

答案 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,但我建议使用someevery遍历数组的所有项,而当谓词为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;