使用数组中的字符串键访问JavaScript对象

时间:2014-09-11 15:06:01

标签: javascript arrays object javascript-objects

我有以下数据结构:

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的简化建议。

2 个答案:

答案 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');