当Array.prototype.slice.call不起作用时,如何将具有属性列表的对象转换为数组?

时间:2016-06-17 11:05:38

标签: javascript

这适用于列表:

> Array.prototype.slice.call([1,2,3])
> [1, 2, 3]

如何根据此类数据{1: "1", 2: "2", 3: "3"}创建列表?除了使用for迭代对象之外还有其他方法吗?

Array.prototype.slice.call()无效,并提供[]

这来自data = Object {0: Object, 1: Object, 2: Object, total : '29'},然后是delete data['total'],需要访问slicepop以及Array的其他方法

2 个答案:

答案 0 :(得分:2)

您可以使用键并映射值。



var o = {1: "1", 2: "2", 3: "3"},
    a = Object.keys(o).map(function (k) {
        return o[k];
    });

console.log(a);
console.log(Array.prototype.slice.call({1: "1", 2: "2", 3: "3", length:5}));




出现了问题,为什么Array.prototype.slice.call不起作用。基本上是因为缺少长度属性。

仅使用可用作索引的属性。



var o1 = {1: "1", 2: "2", 3: "3"},
    o2 = {1: "1", 2: "2", 3: "3", length: 5},
    o3 = {1: "1", 2: "2", 3: "3", abc: 42, length: 5},
    o4 = {0: "0", 1: "1", 2: "2", 3: "3"};

o4.length=Object.keys(o4).length;
console.log(Array.prototype.slice.call(o1));
console.log(Array.prototype.slice.call(o2));
console.log(Array.prototype.slice.call(o3));
console.log(Array.prototype.slice.call(o4));




注意:可以使用properties-in-object分配Object.keys(OBJECT)的动态长度。在控制台中获取undefined的原因是缺少索引0的属性

答案 1 :(得分:1)

var list = [];
for (item in obj) {
    list.push(obj[item]);
}

//use list.push(parseInt(obj[item])) for number array

如果您想直接

,也可以执行以下操作
Object.values(obj);