我有一个看起来像这样的对象:
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(),但我无法让它工作。
答案 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"
答案 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>