使用数字键将JavaScript对象转换为数组

Nik*_*wal 174 javascript arrays jquery json javascript-objects

我有一个像这样的对象作为来自服务器的JSON响应返回:

{"0":"1","1":"2","2":"3","3":"4"}
Run Code Online (Sandbox Code Playgroud)

我想将它转换为像这样的JavaScript数组:

["1","2","3","4"]
Run Code Online (Sandbox Code Playgroud)

有没有最好的方法来做到这一点?无论我在哪里阅读,人们都在使用循环来使用复杂的逻辑.那么有没有其他方法来做到这一点?

ade*_*neo 327

它实际上非常直接使用jQuery $.map

var arr = $.map(obj, function(el) { return el });
Run Code Online (Sandbox Code Playgroud)

小提琴

并且在没有jQuery的情况下几乎同样容易,将键转换为数组,然后将值映射回来 Array.map

var arr = Object.keys(obj).map(function(k) { return obj[k] });
Run Code Online (Sandbox Code Playgroud)

小提琴

这假设它已经被解析为javascript对象,并且实际上不是JSON,这是一种字符串格式,在这种情况下,JSON.parse也需要运行.

在ES2015中,Object.values需要进行救援,这使得这一切变得轻而易举

var arr = Object.values(obj);
Run Code Online (Sandbox Code Playgroud)

  • 这个问题并不明确,但我假设对象的键是数组的索引,它们的性质是 (0,1,2,3)。只是指出人们应该知道这种方法并不能保证数组中的任何顺序;如果键是索引,那么您需要对它们进行显式排序,以便以正确的顺序构建数组。 (2认同)

ben*_*e89 107

var json = '{"0":"1","1":"2","2":"3","3":"4"}';

var parsed = JSON.parse(json);

var arr = [];

for(var x in parsed){
  arr.push(parsed[x]);
}
Run Code Online (Sandbox Code Playgroud)

希望这是你所追求的!


Sat*_*pal 24

你只是这样做

var data = {
    "0": "1",
    "1": "2",
    "2": "3",
    "3": "4"
};
var arr = [];
for (var prop in data) {
    arr.push(data[prop]);
}
console.log(arr);
Run Code Online (Sandbox Code Playgroud)

DEMO


moo*_*e99 20

没有什么比"JSON对象" - JSON是序列化符号.

如果你想将你的javascript对象转换为javascript数组,你要么编写自己的循环[这不会那么复杂!],或者你依赖于underscore.js _.toArray()方法:

var obj = {"0":"1","1":"2","2":"3","3":"4"};
var yourArray = _(obj).toArray();
Run Code Online (Sandbox Code Playgroud)


Eoi*_*rst 9

这里没什么难的.循环遍历对象元素并将它们分配给数组

var obj = {"0":"1","1":"2","2":"3","3":"4"};
var arr = [];
for (elem in obj) {
   arr.push(obj[elem]);
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/Qq2aM/


Tar*_*lah 8

var JsonObj= {"0":"1","1":"2","2":"3","3":"4"};
var array = [];
for(var i in JsonObj) {
    if(JsonObj.hasOwnProperty(i) && !isNaN(+i)) {
        array[+i] = JsonObj[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

DEMO


adi*_*iga 5

您可以使用Object.assign()空数组文字[]作为target

const input = {
  "0": "1",
  "1": "2",
  "2": "3",
  "3": "4"
}

const output = Object.assign([], input)

console.log(output)
Run Code Online (Sandbox Code Playgroud)

如果您检查polyfillObject.assign(target, ...sources)只需将所有可枚举的自身属性从source对象复制到目标对象。如果target是一个数组,它将把数字键添加到数组文字中并返回该target数组对象。