我想使用javascript检查子对象是否存在于对象数组中。数据结构如下所示,
假设我将数据存储在变量 arr_obj 中,然后我尝试使用
if (arr_obj && arr_obj[0].children && arr_obj[0].children.length > 0) {
console.log("children exists")
}
if (arr_obj && !arr_obj[0].children) {
console.log("children doesnt exist")
}
当子数组为 0 时,条件 (arr_obj && !arr_obj[0].children) 会抛出错误“无法读取未定义的属性子代”,有人可以帮我解决这个问题。谢谢。
*编辑 你也应该先检查数组(arr_obj && arr_obj.length > 0 && arr_obj[0].hasOwnProperty('children') && arr_obj[0].children.length > 0 )然后是真否则假。
如果我正确理解你的问题。我只是按照您上面的描述制作对象。我认为在过滤器或地图或减少中使用过滤器,您可以完成您的工作。你应该明白为什么在MDN 中使用 what 。这将返回一个布尔值。如果真元素存在,假则不存在。第一个控制台检查它是否有特定的孩子,第二个控制台检查它是否有你上面描述的孩子。
var obj = [];
var parent1 = {};
parent1.children = [];
parent1.children.push({
name: 'parent1_somename1'
})
parent1.children.push({
name: 'parent1_somename2'
});
obj.push(parent1);
var parent2 = {};
parent2.children = [];
parent2.children.push({
name: 'parent2_somename1'
})
parent2.children.push({
name: 'parent2_somename2'
})
obj.push(parent2);
function checkIfExists(arrList, searchedItem) {
var results = arrList.filter(function(element) {
var resultsChild = element.children.filter(function(childElement) {
return childElement.name === searchedItem;
});
if (resultsChild.length > 0) {
return true;
} else {
return false;
}
})
return results;
}
function checkIfItHasChildren(arrList) {
var results = arrList.map(function(element) {
return element.children.length > 0;
if (results.length > 0) {
return true;
} else {
return false;
}
})
return results;
}
// Check if specific children exists
if (obj && checkIfExists(obj, 'parent2_somename2').length > 0) {
console.log("children exists")
} else {
console.log("children doesnt exist")
}
// Check if array has childrens
if (obj && checkIfItHasChildren(obj).length > 0) {
console.log("It has children")
} else {
console.log("It doesnt has children")
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句