我需要一个帮助。我有一个包含json数据的数组。我需要使用Javascript / Angular.js检查该数组中是否存在任何给定的键。我正在解释下面的数组。
var arr = [{
'category': 1,
'subcategory': 2,
'check': true
}, {
'category': 1,
'subcategory': 2
}];
您可以在上方查看1
索引没有check
密钥。我需要检查该密钥,以便我可以抓取check:true
或check
全部。请帮帮我。
答案 0 :(得分:3)
您可以使用 some()
和 hasOwnProperty()
some()对数组中存在的每个元素执行一次回调函数,直到找到一个回调返回truthy值的值(转换为布尔值时变为true的值)。如果找到这样的元素,some()会立即返回true。否则,some()返回false。仅为已分配值的数组的索引调用回调;对于已删除的索引或从未分配过值的索引,不会调用它。 ( Taken from here )
var arr = [{
'category': 1,
'subcategory': 2,
'check': true
}, {
'category': 1,
'subcategory': 2
}];
var key='check';
var res = arr.some(function(v) {
return v.hasOwnProperty(key);
});
console.log(res);
旧浏览器check polyfill option of some method。
如果您想获取具有该属性的值或对象,请使用 find()
var arr = [{
'category': 1,
'subcategory': 2,
'check': true
}, {
'category': 1,
'subcategory': 2
}];
var key = 'check';
var res = arr.find(function(v) {
return v.hasOwnProperty(key);
});
console.log(res);
对于较旧的浏览器,请检查polyfill option of find method。
或者使用简单的for循环
var arr = [{
'category': 1,
'subcategory': 2,
'check': true
}, {
'category': 1,
'subcategory': 2
}];
var chk = 0;
for (var i = 0; i < arr.length; i++) {
if (arr[i].check == true) {
chk = 1;
break;
}
}
console.log(chk);
答案 1 :(得分:0)
正如@PranavCBalan所说,你可以使用方法hasOwnProperty()。
我建议你看一下Lodash。您可以找到许多实用程序来解决代码中可能需要的典型检查或功能。
答案 2 :(得分:0)
试试这个
angular.forEach(arr,function(value,key){
if(value.check == true)
value.check = 1;
else if(value.check == undefined)
value.check = 0;
})
var app = angular
.module('MyApp', [
])
.controller('Main', ['$scope', function ($scope) {
$scope.arr = [
{
'category': 1,
'subcategory': 2,
'check': true
},
{
'category': 1,
'subcategory': 2
}
];
angular.forEach($scope.arr,function(value,key){
if(value.check == true)
value.check = 1;
else if(value.check == undefined)
value.check = 0;
})
}])
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="main-content" ng-app="MyApp" ng-controller="Main">
<pre>{{arr|json}}</pre>
</div>
&#13;