2014-10-06 3 views
0

Если у меня есть массив объектов:Как получить индексы объектов в массиве/JS

myArray[person{}, person{}, person{}] 

И каждый человек может содержать массив объектов Дети, как это:

person{ 
    name: 'XXX', 
    age: 'XXX', 
    children: [{ 
     name: 'XXX', 
     age: 'XXX' 
    },{ 
     name: 'XXX', 
     age: 'XXX' 
    },{ 
     name: 'XXX', 
     age: 'XXX' 
    }] 
} 

Как я могу получить индекс каждого Person в myArray, а также индекс объектов в массиве Children?

Я получаю индекс Person объекты в туАггау, как это, используя IndexOf(), которая работает:

function getObjectIndex(myObject) {      
    var myArray = _.flatten(_.values(objects)); 

    var ret = myArray.indexOf(myObject); 

    return ret; //RETURNS 0, 1, 2 etc... 
} 

Я уверен, как расширить функциональные возможности getObjectIndex, чтобы получить индексы объектов дети в каждом человеке

function getObjectIndex(myObject) {      
    var myArray = _.flatten(_.values(objects)); 

    var ret = myArray.indexOf(myObject); 

    if (myObject.children.length > 0){ 

     //UNSURE WHAT LOGIC TO APPLY HERE 

     ret += ; 
    } 

    return ret; 
} 

Если есть дети объектов нет, я в идеале хотел бы getObjectIndex вернуться:

Person index in myArray _ Children index in Person 

Так что, если есть три объекта Дети в лицо:

0_0 
0_1 
0_2 

Любая помощь или предложения будут очень высоко.

ответ

1

Если вы передаете массив map, то вторым параметром для функции итератора является индекс объекта. Это можно использовать для получения нужного результата:

var indexArrays = _.map(myArray, function(person, personIndex){ 
     return _.map(person.children, function(child, childIndex){ 
      return personIndex + '_' + childIndex; 
     }); 

    }); 

    var indices = _.flatten(indexArrays); 
Смежные вопросы