将类数组对象转换为数组的最佳方法是什么?

时间:2013-11-20 12:01:09

标签: javascript arrays object

假设我们有以下内容:

var o = {"1": 1, "2": 2, "5": 5};

如果我这样做,我想把它变成我能得到的东西:

var o = []; o[1] = 1, o[2] = 2, o[5] = 5;

我怎么能这样做?

3 个答案:

答案 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