查找包含具有特定属性的对象的数组的名称

时间:2015-12-15 12:30:02

标签: javascript arrays object lodash

我有一个看起来像这样的对象:

var myObject = {
    array1: [
        {id: "aaa"},
        {id: "bbb"},
        {id: 'ccc'}
    ],
    array2: [
        {id: "ddd"},
        {id: "eee"},
        {id: 'fff'}
    ],
    childObject: {
        property: "value"
    }
};

我需要的是一个获取具有特定id值的数组名称的函数。例如:

getArrayName("myObject", "id", "eee") //returns "array2"

因为它总是“id”,所以可以简化为:

getArrayName("myObject", "ccc") //returns "array1"

我在这个项目中使用lodash,所以我尝试过.findKey(),但我无法让它工作。

3 个答案:

答案 0 :(得分:2)

试试这个

function getArrayName(myObject, value)
{
  for (  var arrayId in myObject)
  {
    var arr = global[ arrayId ];
    for ( var counter = 0; counter < arr.length; counter++) 
    {
      if ( arr[ counter ].id == value )
      {
        return arrayId ;
      }
    }
  }
  return "";
}

答案 1 :(得分:1)

您可以执行此操作并概括您要搜索的参数:

function getArrayName(objName, propKey, propVal) {
    var obj = window[objName];
    var resArray = _.find(obj, function (arr) {
        return _.some(arr, function (arrObj) {
            return arrObj[propKey] === propVal;
        });
    })

    var index = 0;

    for (var key in obj) {
        if (obj[key] === resArray) {
            index = key;
            break;
        }
    }

    return index;
}

getArrayName("myObject", "id", "ccc") //returns "array1"

Fiddle

答案 2 :(得分:0)

Try this:

<script>
      var myObject = {
    array1: [
        {id: "aaa"},
        {id: "bbb"},
        {id: 'ccc'}
    ],
    array2: [
        {id: "ddd"},
        {id: "eee"},
        {id: 'fff'}
    ],
    childObject: {
        property: "value"
    }
};
function getArrayName(obj,id){
  $.each(obj,function(key,value){
    $.each(obj[key],function(key1,val){
      if(val.id === id)
      alert(JSON.stringify(obj[key]));
    })
  });
}
   getArrayName(myObject,'eee');   
    </script>