2012-01-23 5 views
2

Рассмотрим этот массивСортировать трехмерный массив в JavaScript,

var LIST =[]; 

LIST['C']=[]; 
LIST['B']=[]; 

LIST['C']['cc']=[]; 
LIST['B']['bb']=[]; 

LIST['C']['cc'].push('cc0'); 
LIST['C']['cc'].push('cc1'); 
LIST['C']['cc'].push('cc2'); 
LIST['B']['bb'].push('bb0'); 
LIST['B']['bb'].push('bb1'); 
LIST['B']['bb'].push('bb2'); 

Я могу перебрать этот массив как

for(var i in LIST){ 

     console.log(i)//C,B 
     var level1=LIST[i]; 

     for(var j in level1){ 
     console.log(j)//cc,bb 
     // etc... 
     } 

    } 

Fine .. У меня есть несколько основных вопросов.

1.Как отсортировать массив на каждом уровне?

Один уровень может быть отсортирован по методу .sort (fn). Как я могу перейти на внутренние уровни?

2.Почему метод indexOf не работает, чтобы найти элементы на первых двух уровнях?

Если это из-за параметра non string .. как я могу искать элементы массива в массиве, если элемент не является строкой?

3. Как работает for(var i in LIST)? мне просто нужно общее представление о индексации и перекручивание через массив ..

спасибо ..

+5

Для большей части вашего кода вы должны использовать литерал ''} 'объекта. Массивы ('[]') должны иметь инкрементные значения числовых ключей. – zzzzBov

+0

@zzzzBov правильный - ваши объекты являются экземплярами массива, но вы не используете их правильно. – Pointy

+0

Для сортировки массива используйте метод [Array.sort] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort "MDN Reference") с функцией обратного вызова. –

ответ

1

LISTНЕ трехмерный массив в Javascript, это всего лишь массив.

//declare an array which names LIST. 
var LIST = []; 

//set a property named 'C' of the LIST to be an array. 
LIST['C']=[]; 
//set a property named 'B' of the LIST to be an array. 
LIST['B']=[]; 

//set a property named 'cc' of the 'LIST.C'(which is an array object) 
LIST['C']['cc']=[]; 
//set a property named 'bb' of the 'LIST.B'(which is an array object) 
LIST['B']['bb']=[]; 

Фактом является то, что последний уровень должен быть массивом, см. Мой пример кода ниже.

function iterateOrderd(obj) { 
    if (obj instanceof Array) { 
     obj.sort(); 
     for (var j = 0, l=obj.length; j < l; j++) { 
      console.log(obj[j]); 
     } 
    } else { 
     var sortable = []; 
     for (var i in obj) { 
      if (obj.hasOwnProperty(i)) { 
       sortable.push(i); 
      } 
     } 
     sortable.sort(); 
     for (var j = 0, l=sortable.length; j < l; j++) { 
      console.log(sortable[j]); 
      iterateOrderd(obj[sortable[j]]); 
     } 
    } 
} 


var LIST = {}; 

LIST['C'] = {}; 
LIST['B'] = {}; 

LIST['C']['cc']=[]; 
LIST['B']['bb']=[]; 

LIST['C']['cc'].push('cc0'); 
LIST['C']['cc'].push('cc1'); 
LIST['C']['cc'].push('cc2'); 
LIST['B']['bb'].push('bb0'); 
LIST['B']['bb'].push('bb1'); 
LIST['B']['bb'].push('bb2'); 

iterateOrderd(LIST); 
+0

ok .. спасибо .. поэтому здесь я пытаюсь сортировать свойства в алфавитном порядке .. или пока цикл через это i нужно получить это в алфавитном порядке .. как? – Sarath

+0

@SarathSaleem Смотрите мой пример кода. – xdazz

+0

..thanks это работает .. – Sarath

0

Что ваши критерии сортировки? Я имею в виду, как вы скажете, массив firstArray подходит к secondArray? относительно for (counter in myArray), counter будет принимать значения элемента массива на каждой итерации.

for (counter in [0,1,5]), счетчик будет иметь значения 0, 1 и 5 в 3 итерациях.

В вашем случае, i будет иметь значение LIST['B'] и LIST['C'] в двух итерациях и j будет иметь значение LIST['B']['bb'], LIST['B']['cc'], LIST['C']['bb'] и LIST['C']['cc'].

И i и j будут массивами.

+0

мои критерии сортировки основаны только на алфавитном порядке, на самом деле элементы будут добавляться в случайный порядок. В то же время, пройдя через него, я получу в том же порядке. – Sarath

1

Вы должны знать, что Array наследует от Object.

В JavaScript любой экземпляр Object является ассоциативным массивом (!), Поэтому действует как массив в PHP. Например:

var o = {}; // or new Object(); 
o['foo'] = 'bar'; 
o[0] = 'baz'; 
for (i in o) { console.log(i, o[i]); } 

Сортировка Object не имеет большого смысла. indexOf будет работать теоретически, но не реализован.

Arrays - это упорядоченные списки. Array экземпляры push(), length, indexOf(), sort() и т.п., но только для числовых индексов. Но опять же, Array наследует от Object, так что любой массив может также содержать нечисловую запись индекса:

var a = []; // or new Array(); 
a[0] = 'foo'; // a.length is now 1 
a.push('baz'); // a[1] === 'baz' 
a.qux = 1; // will not affect a.length 
a.sort(); // will not affect a.qux 
for (i in a) { console.log(i, a[i]); } 

Я рекомендую играть с массивами и объектами, и вы вскоре получите точку.

+0

, так что я думаю, что вот что я хочу, это [0] = будет быть массивом .. – Sarath

+0

можно сортировать его на основе записей, отличных от числового индекса, в алфавитном порядке. – Sarath

Смежные вопросы