2014-10-22 2 views
0

У меня есть объект в JavaScript:jQuery - как найти конкретный объект JavaScript внутри массива внутри объекта?

var stuffObject = { 
    stuffArray1 : [object1, object2, object3], 
    stuffArray2 : [object4, object5, object6] 
} 

object1 на 6 выглядеть следующим образом:

object1 = { 
    dataStuff : { 
     stuffId: "foobar" 
    } 
} 

Мой вопрос: данный ключ "Foobar", как я могу получить object1 из stuffObject с помощью JQuery ? Ключевой «stuffId» всегда имеет уникальное значение.

ответ

0

Спасибо за помощь, ребята, используя вход других людей, я решил это сам:

getStuffById: function(id){ 
    for (stuffArray in stuffObject) { 
      for (stuff in stuffObject[stuffArray]) { 
       if (stuffObject[stuffArray][stuff].dataStuff.stuffId == id) { 
        return stuffObject[stuffArray][stuff]; 
       } 
      } 
     } 
    return null; 
} 

Это также работает лучше, чем (сейчас удален) ответ, который использует .grep(), поскольку эта функция прекращается, как только он находит правильный объект.

1

Вам не обойти итерацию по набору, чтобы найти объект, который вы ищете. jQuery не может с этим справиться. Его целью является манипулирование DOM. Если вы хотите, чтобы функциональность имела дело с объектами, наборами, списками и т. Д., Проверьте lodash.

Я написал функцию для решения проблемы. Надеюсь, это понятно.

var stuffObject = { 
    stuffArray1 : [{dataStuff: {stuffId: 'foobar'}}, {dataStuff: {stuffId: 'foo'}}, {}], 
    stuffArray2 : [{}, {dataStuff: {stuffId: 'bar'}}, {}] 
} 

function getObjByStuffId(stuffObject, stuffId) { 
    var key, arr, i, obj; 
    // Iterate over all the arrays in the object 
    for(key in stuffObject) { 
     if(stuffObject.hasOwnProperty(key)) { 
      arr = stuffObject[key]; 
      // Iterate over all the values in the array 
      for(i = 0; i < arr.length; i++) { 
       obj = arr[i]; 
       // And if it has the value we are looking for 
       if(typeof obj.dataStuff === 'object' 
        && obj.dataStuff.stuffId === stuffId) { 
        // Stop searching and return the object. 
        return obj; 
       } 
      } 
     } 
    } 
} 

console.log('foobar?', getObjByStuffId(stuffObject, 'foobar')); 
console.log('foo?', getObjByStuffId(stuffObject, 'foo')); 
console.log('bar?', getObjByStuffId(stuffObject, 'bar')); 
Смежные вопросы