假设我们有以下内容:
var o = {"1": 1, "2": 2, "5": 5};
如果我这样做,我想把它变成我能得到的东西:
var o = []; o[1] = 1, o[2] = 2, o[5] = 5;
我怎么能这样做?
答案 0 :(得分:1)
试试这个:
var o = { ... }; // your object
var oArr = [];
for (var i in o) {
if (parseInt(i) == i) {
oArr[parseInt(i)] = o[i];
}
}
请注意,它不接受非数字键。
答案 1 :(得分:1)
如果你有一个合适的长度属性,那真的很容易:
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
答案 2 :(得分:0)
你不应该这样做, 1.您不确定最大索引值有多大。 2.可能存在很多间隙,数组中的索引将为空,
因此,只需使用索引号的字符串转换并在同一对象中查找它。
var o = {"1": 1, "2": 2, "5": 5};
var index = 5;
o[index.toString()] // gives 5