假設我們有以下幾點:將類似數組的對象轉換爲數組的最佳方式?
var o = {"1": 1, "2": 2, "5": 5};
,我想變成什麼,如果我做了,我會得到:
var o = []; o[1] = 1, o[2] = 2, o[5] = 5;
我怎麼能這樣做呢?
假設我們有以下幾點:將類似數組的對象轉換爲數組的最佳方式?
var o = {"1": 1, "2": 2, "5": 5};
,我想變成什麼,如果我做了,我會得到:
var o = []; o[1] = 1, o[2] = 2, o[5] = 5;
我怎麼能這樣做呢?
試試這個:
var o = { ... }; // your object
var oArr = [];
for (var i in o) {
if (parseInt(i) == i) {
oArr[parseInt(i)] = o[i];
}
}
注意,它不會接受那些非數字鍵。
你不應該這樣做, 1.你不確定最大指數值有多大。 2.可能會有很多空白,數組中的那些索引將爲空,因此,只需使用索引號的字符串轉換並在相同的對象中查找即可。
var o = {"1": 1, "2": 2, "5": 5};
var index = 5;
o[index.toString()] // gives 5
不需要'toString'。 – georg
如果你有一個適當的長度屬性,它真的很容易:
var o = {"1": 1, "2": 2, "5": 5, 'length' : 6};
o = Array.prototype.slice.call(o); // [undefined, 1, 2, undefined, undefined, 5]
如果你沒有length屬性,你可以計算它:
var o = {"1": 1, "2": 2, "5": 5};
o.length = Object.keys(o).reduce(function(max,key){
return isNaN(key) ? max : Math.max(max, +key);
},-1) + 1;
o = Array.prototype.slice.call(o); // [undefined, 1, 2, undefined, undefined, 5]
一件事但要注意的是,當你訪問一個對象的屬性時,它總是被轉換成一個字符串,所以下面的例子對你的例子很有用,即使o
不是一個數組:
var o = {"1": 1, "2": 2, "5": 5};
o[1] // 1
o[2] // 2
o[5] // 5
o[0] // undefined
'o [5] == 5'對於您的原始對象是正確的。 – georg