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


175

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

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

我想将其转换为如下所示的JavaScript数组:

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

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



8
顺便说一句
光是

Answers:


328

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是一种字符串格式),在这种情况下,JSON.parse也需要进行遍历。

在ES2015中Object.values,可以轻松进行救援

var arr = Object.values(obj);

1
@adeneo先生,能否请您提供有关htis方法的一些说明。
Nikhil Agrawal 2014年

1
@adeneo又名伯恩斯先生...感谢您的快速解决方案。
Dzeimsas Zvirblis 2015年

1
@NikhilAgrawal这里的窍门是使用Object.keys(),它以数组的形式返回对象的键(=它自己的可枚举属性)。然后,我们可以使用array.map将每个键替换为新数组中的相应值。
antoine

1
这是一个答案,但不是一个非常友好的答案。
sheriffderek

1
这个问题不是很明确,但是我已经假设对象的键是数组的索引,因为它们的性质是(0,1,2,3)。只是指出人们应该知道该方法不能保证数组中的任何顺序。如果键是索引,则需要显式对其进行排序,以便以正确的顺序构建数组。
leejt489

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

希望这就是你所追求的!


谢谢。真的需要。有人在整个代码中使用对象作为数组,这很好,直到我需要在其上构建……
amanda fouts 2015年

谢谢!完美的答案。
文森特

非常接近我需要的东西:for(var x in data){arr [x] = data [x]; }
安德鲁(Andrew)

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

演示


20

就像“ JSON对象”一样,JSON是一种序列化表示法。

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

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

1
谢谢-像魅力。但是如何使它也对内部对象(对象内的对象)也一样?内部对象也应在根级别上成为数组的平面成员(以便可以将其传递到datatables.net等)
Gopalakrishna Palem 2014年

+1:“没有什么比“ JSON对象”更好的了-JSON是一种序列化表示法。” -我不敢相信我必须听过多少次才能完全理解它。
radbyx

9

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

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

http://jsfiddle.net/Qq2aM/



4

试试这个:

var newArr = [];
$.each(JSONObject.results.bindings, function(i, obj) {
    newArr.push([obj.value]);
});

您的解决方案将是这里提出的解决方案中最慢的一种...对商业代码
不利

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

var vals = Object.values(obj);

console.log(vals); //["1", "2", "3", "4"]

问题的另一种选择

var vals = Object.values(JSON.parse(obj)); //where json needs to be parsed

2

使用原始javascript,假设您具有:

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

您可以通过以下方式获取值:

Object.keys(j).map(function(_) { return j[_]; })

输出:

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

2

不知道我在这里缺少什么,只是尝试下面的代码即可。我在这里想念什么吗?

https://jsfiddle.net/vatsalpande/w3ew5bhq/

$(document).ready(function(){

var json = {
   "code" :"1", 
   "data" : { 
    "0" : {"id":"1","score":"44"},
    "1" : {"id":"1","score":"44"}
    }
  };

  createUpdatedJson();

  function createUpdatedJson(){

    var updatedJson = json;

    updatedJson.data = [updatedJson.data];

    $('#jsondata').html(JSON.stringify(updatedJson));


    console.log(JSON.stringify(updatedJson));
  }
 })

1

假设您具有如下所示的值

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

然后,您可以使用以下代码将其转换为javascript数组

var arr = [];
json = JSON.stringify(eval('(' + obj + ')')); //convert to json string
arr = $.parseJSON(json); //convert to javascript array

这也可以将json转换为多维JavaScript数组。

当使用php json编码的字符串时,此页面上的其他方法似乎对我来说都不完全起作用,除了我在这里提到的方法。


1

这里是你怎么能拿对象数组的例子,并随后对数组进行排序。

  function osort(obj)
  {  // map the object to an array [key, obj[key]]
    return Object.keys(obj).map(function(key) { return [key, obj[key]] }).sort(
      function (keya, keyb)
      { // sort(from largest to smallest)
          return keyb[1] - keya[1];
      }
    );
  }

0

这是最好的解决方案。我认同。

Object.keys(obj).map(function(k){return {key: k, value: obj[k]}})

0
      var data = [];

      data  = {{ jdata|safe }}; //parse through js
      var i = 0 ;
      for (i=0;i<data.length;i++){
         data[i] = data[i].value;
      }

2
感谢您提供此代码段,它可能会提供一些有限的即时帮助。一个适当的解释,将大大提高其长期的价值通过展示为什么这是一个很好的解决了这个问题,并会使其与其他类似的问题,更有助于未来的读者。请编辑您的答案以添加一些解释,包括您所做的假设。
Mogsdad

0

您可以使用PHP将json对象转换为Array&String。

$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}';

$b=json_decode($data);

$i=0;
while($b->{'resultList'}[$i])
{
    print_r($b->{'resultList'}[$i]->{'displayName'});
    echo "<br />";
    $i++;
}

问题是关于javascript而不是PHP。
查尔斯·泰勒

-1

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

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

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

console.log(output)

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.