2012-01-23 50 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... 
     } 

    } 

精細..我有幾個基本問​​題。

1.如何對每個級別的數組進行排序?

一個級別可以按.sort(fn)方法排序。我如何轉移到內在層面?

2.爲什麼indexOf方法無法找到前兩個級別的元素?

如果是因爲非字符串參數的..我怎麼能在搜索數組的數組的項目,如果該項目不是字符串?

3.How 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參考」)方法對數組進行排序。 –

回答

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

好..謝謝..所以這裏即時嘗試按字母順序排序屬性..或雖然循環通過我需要按字母順序排列。怎麼樣? – Sarath

+0

@SarathSaleem看我的代碼示例。 – xdazz

+0

..感謝它的工作.. – Sarath

0

你是什麼排序標準?我的意思是,你會如何說數組firstArray之前secondArray? 關於for (counter in myArray),counter將在每次迭代中獲取數組元素的值。

for (counter in [0,1,5]),計數器將在3次迭代值0,1和5。

在你的情況,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()等,但這些僅適用於數字索引。但同樣,從ObjectArray繼承,所以任何陣列還可以包含非數字索引條目:

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] = will是一個數組.. – Sarath

+0

是否有可能根據非數字索引條目按字母順序排序.. – Sarath