Angular.js / Javascript:检查一个对象是否存在于数组的任何元素中
Angular.js / Javascript: checking if an object is found in any of the elements of an array
我有一个数组,它的结构是这样的:
$scope.roomlist = [
{"roomid":"1", "tablecount":"10", "chaircount":"20", "whiteboards":"2"},
{"roomid":"2", "tablecount":"15", "chaircount":"30", "whiteboards":"2"},
{"roomid":"3", "tablecount":"10", "chaircount":"20"}];
数组值是动态的,数组是通过连接一些表生成的。白板是roomlist
返回的所有房间中可能存在的元素之一,可能存在于上面所示的某些房间中,也可能根本不存在任何房间。
所有我需要做的是测试,看看是否有至少一个房间在列表中有白板对象。
我已经尝试了indexOf
测试,但它返回-1。
我执行的代码是
var myrooms = $scope.roomlist;
var results = myrooms.indexOf("whiteboards");
然后
console.log(results);
有什么建议吗?
您需要逐个房间迭代,然后检查是否存在。
function searchRoomsFor(objectName, roomList) {
var found = false;
for (var roomIndex in roomList) {
var room = roomList[roomIndex];
if (objectName in room) {
found = true;
}
}
return found;
}
// Check for an object
console.log(searchRoomsFor('whiteboards', $scope.roomlist));
如果你只是想检查是否有一个房间至少有一个白板,那么你可以简单地使用Array.prototype.some
:
var roomlist = [
{"roomid":"1", "tablecount":"10", "chaircount":"20", "whiteboards":"2"},
{"roomid":"2", "tablecount":"15", "chaircount":"30", "whiteboards":"2"},
{"roomid":"3", "tablecount":"10", "chaircount":"20"}
];
var anyRoomWithWhiteBoard = roomlist.some(room => room.whiteboards && parseInt(room.whiteboards) > 0);
console.log(anyRoomWithWhiteBoard);
您可以使用lodash库来查找while board是否存在
$scope.roomlist = [{
"roomid": "1",
"tablecount": "10",
"chaircount": "20",
"whiteboards": "2"
}, {
"roomid": "2",
"tablecount": "15",
"chaircount": "30",
"whiteboards": "2"
}, {
"roomid": "3",
"tablecount": "10",
"chaircount": "20"
}];
var myrooms = $scope.roomlist;
w = _.find(myrooms, function(r) {
return r.whiteboards
});
if (w) {
alert("there is a whiteboard");
} else {
alert("there is no white board")
}
https://jsfiddle.net/phpforyou/jv5hzsvh/如果你想在对象数组中找到一个键的第一个索引,你需要执行一个循环。
var index = -1;
for (var i = 0; i < $scope.roomlist.length; i++) {
// check if the whiteboards property is defined
if (typeof roomlist[i].whiteboards !== 'undefined') {
var index = i;
break; // we've found one, stop looping
}
}
console.log(index);
有一种新的、支持度较差的array.findIndex()
方法,它可以将前面的循环简化为下面的循环。它为每一项调用一个函数,并返回函数返回true
的第一项的索引。
var indexOfWhiteboardRoom = $scope.roomlist.findIndex(function(room, index, arr) {
return typeof room.whiteboard !== 'undefined';
});
如果你想找到第一个房间的白板,你可以使用array.find()
。它为数组中的每一项调用一个函数,并返回函数返回true
的第一项。
var whiteboardRoom = $scope.roomlist.find(function(room, index, arr) {
return typeof room.whiteboard !== 'undefined';
});
如果你想找到所有定义了whiteboard
属性的对象,你可以使用array.filter()
。它为数组中的每一项调用一个函数,并且只返回函数结果为true
的项。
var whiteboardRooms = $scope.roomlist.filter(function(room, index, arr) {
return typeof room.whiteboard !== 'undefined';
});
如果你只是想知道whiteboard
是否存在。
var whiteboardExists = $scope.roomlist.some(function(room, index, arr) {
return typeof room.whiteboard !== 'undefined';
});
你可以试试这个类似于你的问题
var arr = [1, 2, 3];
var check = [3, 4];
var found = false;
for (var i = 0; i < check.length; i++) {
if (arr.indexOf(check[i]) > -1) {
found = true;
break;
}
}
console.log(found);
您无法在$scope.roomlist
中获得indexOf('whiteboards')
,因为白板不是数组roomlist的直接元素。所以你必须迭代它。使用AngularJS angular.forEach()是最好的方法。
var hasWhiteboards;
angular.forEach($scope.roomlist, function (list) {
if (list.whiteboards) {
hasWhiteboards = true;
}
});
- 在函数中添加数组元素的数值
- 访问JSON对象内部的数组元素
- Mongoose-在更新中删除数组元素
- javascript数组元素是否知道其封闭数组
- 将数组元素附加到FormData dos'不适用于Firefox 15
- 如何在javascript中使用click函数选择数组元素
- 如何在JavaScript中剥离数组元素中的非整数
- 消隐数组元素是否生成自己的属性
- 如何使一个Math.random数组元素比另一个数组元素更有可能被选中
- 在Codrops的内容中添加数组元素展开缩略图网格预览
- 如何使用Jquery水平打印表中的数组元素,并在某个元素之后垂直打印
- 如何访问数组中的数组元素(JavaScript)
- 生成ACF标记位置的数组(元素列表后缺少])
- validate.js验证数组元素
- JavaScript Unshift EACH 数组元素
- 如何在加号运算符之后选择数组元素的一部分
- 访问标记图标的图像数组元素
- JavaScript 合并相同的数组元素
- 删除仅空格数组元素
- JavaScript闭包和返回数组元素