我有以下数据结构:
var settings = {
notifications: [
{
'logout' : {
icon: 'fa fa-sign-out',
text: [
{heading: 'Logout'},
{body: 'You have unsaved data. Are you sure you want to log out?'},
]
}
},
{
'delete' : {
icon: 'fa fa-times',
text: [
{heading: 'Delete'},
{body: 'This operation can not be undone. Are you sure you want to delete?'},
]
}
},
],
};
当我不知道注销对象在通知数组中的位置时,如何检索logout.icon
的值?
普通嵌套对象listed here的解决方案为我提供了 undefined 。
---解决方案
根据Yassine Moustarham的回答,这是我可重复使用的功能:
function getProp(arr,key,prop)
{
for(var i=0;i<arr.length;i++)
{
if(arr[i][key])
{
return arr[i][key][prop];
}
}
return false;
};
var icon = getProp(settings.notifications, 'logout', 'icon');
感谢Felix Kling的简化建议。
答案 0 :(得分:3)
这里你去:如果你确定他们肯定会成为一个名为logout的通知数组元素的成员 那么这个函数将返回他的图标成员
function getIcon()
{
for(i=0;i<settings.notifications.length;i++)
{
if(typeof(settings.notifications[i].logout)!=='undefined')
{
return settings.notifications[i].logout.icon;
}
}
return false;
}
undefined写错了! 并且想到Felix Kling你需要添加typeof befor与&#39; undefined&#39;。
答案 1 :(得分:2)
您需要递归迭代对象的属性,直到找到您要查找的密钥:
function findKey(object, key){
if (object.hasOwnProperty(key)) {
// do stuff
console.log('found');
return true;
}
for (var property in object) {
if (typeof object[property]=='object') {
return findKey(object[property], key);
}
}
}
findKey({'bop':{'foo':'bar'}}, 'foo');