2015-12-15 29 views
0

數組我有一個對象,它看起來像這樣的名字:查找包含對象具有一定財產

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" 

,因爲它總是「身份證」,它可以簡化爲:

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

我使用lodash在這個項目中,所以我試着.findKey(),但我不能讓它工作。

+0

如果您使用lodash:' _.findKey(myObject,_.ary(_。partialRight(_。any,{id:'eee'}),1))' –

回答

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

你可以做到這一點,也概括你想搜索的參數:

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

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> 
相關問題