Найти имя массива, содержащего объект с определенным свойством

У меня есть объект, который выглядит так:

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

Что мне нужно, это функция, которая получает имя массива с определенным значением идентификатора. Например:

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

потому что это всегда "id", его можно упростить до:

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

Я использую lodash в этом проекте, поэтому я попытался.findKey(), но я не могу заставить его работать.

3 ответа

Решение

Попробуй это

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 "";
}

Вы можете сделать это, а также обобщить параметры, которые вы хотите найти по:

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"

скрипка

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>
Другие вопросы по тегам