将带有数字键的 JavaScript 对象转换为数组

IT技术 javascript jquery arrays json javascript-objects
2021-01-21 16:44:41

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

{
  "0": "1",
  "1": "2",
  "2": "3",
  "3": "4"
}

我想把它转换成这样的 JavaScript 数组:

["1","2","3","4"]

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

6个回答

它实际上非常直接与 jQuery 的 $.map

var arr = $.map(obj, function(el) { return el });

小提琴

没有 jQuery 也几乎同样简单,将键转换为数组,然后使用 Array.map

var arr = Object.keys(obj).map(function(k) { return obj[k] });

小提琴

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

在 ES2015 中有Object.values救援,这让这变得轻而易举

var arr = Object.values(obj);
@adeneo 先生能否请您提供一些有关 htis 方法的解释。
2021-03-19 16:44:41
这是一个答案,但不是一个非常友好的答案。
2021-03-23 16:44:41
@NikhilAgrawal 这里的技巧是使用 Object.keys(),它将对象的键(= 它自己的可枚举属性)作为数组返回然后我们可以使用 array.map 将每个键替换为新数组中的相应值。
2021-03-31 16:44:41
@adeneo 又名烧伤先生...感谢您提供这个快速解决方案。
2021-04-06 16:44:41
这个问题并不明确,但我假设对象的键是数组的索引,它们的性质是 (0,1,2,3)。只是指出人们应该知道这种方法并不能保证数组中的任何顺序;如果键是索引,那么您需要对它们进行显式排序,以便以正确的顺序构建数组。
2021-04-07 16:44:41

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]);
}

console.log(arr)

希望这就是你所追求的!

非常接近我需要的,谢谢: for(var x in data){ arr[x] = data[x]; }
2021-03-22 16:44:41
谢谢。真的需要那个。有人在大量代码中使用一个对象作为数组,这很好,直到我需要在它之上构建......
2021-04-09 16:44:41

你只是这样做

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

var arr = [];
for (var prop in data) {
    arr.push(data[prop]);
}

console.log(arr);

演示

没有什么像“JSON 对象” - JSON 是一种序列化表示法。

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

var obj = {"0":"1","1":"2","2":"3","3":"4"};
var yourArray = _(obj).toArray();
+1:“没有什么比得上“JSON 对象”了——JSON 是一种序列化符号。” - 我不敢相信在完全理解之前我不得不听多少次。
2021-03-11 16:44:41
谢谢 - 就像魅力一样。但是如何让它对内部对象(对象中的对象)也做同样的事情呢?内部对象也应该在根级别成为数组的平面成员(以便它们可以传递到 datatables.net 等)
2021-03-31 16:44:41

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

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

http://jsfiddle.net/Qq2aM/