Найти имя массива, содержащего объект с определенным свойством
У меня есть объект, который выглядит так:
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>