如果数组中的所有对象都具有属性值,则返回true

sch*_*sch 3 javascript angularjs

我有一个对象数组,如下所示:

$scope.objectArray = [
  {Title: 'object1', Description: 'lorem', Value: 57},
  {Title: 'object2', Description: 'ipsum', Value: 32},
  {Title: 'object3', Description: 'dolor', Value: 135}
]
Run Code Online (Sandbox Code Playgroud)

如果此数组中的所有对象在属性"value"中都有值,我想检查并返回true.

我想我可以用forEach循环来做,但有没有比这更好的方法?

var isTrue = true;
angular.forEach(objectArray, function(o){
  if (!o.Value){
    isTrue = false; // change variable 'isTrue' to false if no value
  }
});
Run Code Online (Sandbox Code Playgroud)

Tus*_*har 5

你可以用Array#everyArrow功能

var isTrue = objectArray.every(obj => obj.Value);
Run Code Online (Sandbox Code Playgroud)

var objectArray = [
  {Title: 'object1', Description: 'lorem', Value: 57},
  {Title: 'object2', Description: 'ipsum', Value: 32},
  {Title: 'object3', Description: 'dolor', Value: 135}
];

var isTrue = objectArray.every(obj => obj.Value);
document.body.innerHTML = isTrue;
Run Code Online (Sandbox Code Playgroud)


更新:

要处理0价值,Object#hasOwnProperty可以使用.

objectArray.every(obj => obj.hasOwnProperty('Value'))
Run Code Online (Sandbox Code Playgroud)

var objectArray = [
  {Title: 'object1', Description: 'lorem', Value: 57},
  {Title: 'object2', Description: 'ipsum', Value: 32},
  {Title: 'object3', Description: 'dolor', Value: 0}
];

var isTrue = objectArray.every(obj => obj.hasOwnProperty('Value'));
document.body.innerHTML = isTrue;
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 3

只要使用Array#every(), if0不算。

var $scope = { objectArray: [{ Title: 'object1', Description: 'lorem', Value: 57 }, { Title: 'object2', Description: 'ipsum', Value: 32 }, { Title: 'object3', Description: 'dolor', Value: 135 }] },
    isTrue = $scope.objectArray.every(function (a) {
        return a.Value;
    });

document.write(isTrue);
Run Code Online (Sandbox Code Playgroud)

将测试0作为值的解决方案。

var $scope = { objectArray: [{ Title: 'object1', Description: 'lorem', Value: 0 }, { Title: 'object2', Description: 'ipsum', Value: 32 }, { Title: 'object3', Description: 'dolor', Value: 135 }] },
    isTrue = $scope.objectArray.every(function (a) {
        return a.Value || a.Value === 0;
    });

document.write(isTrue);
Run Code Online (Sandbox Code Playgroud)