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

183

我从服务器获得的JSON响应中返回了这样一个对象:

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

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

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

有没有最佳方法来完成这个任务?我看到很多人都在使用循环的复杂逻辑。那么除了循环之外,还有其他的方法吗?


3
请将JS对象转换为数组的更好方法 - BENARD Patrick
8
顺便说一下,仅仅一个循环并不构成“复杂逻辑”:)) - moonwave99
17个回答

2

使用原生JavaScript,假设您有以下内容:

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

您可以使用以下方式获取值:
Object.keys(j).map(function(_) { return j[_]; })

输出:

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

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

被接受的解决方案期望键从0开始并且连续 - 它将值存入数组,但在此过程中丢失了索引。

如果您的“具有数字键的对象”不符合这些更严格的假设,请使用此选项。

//let sourceObject = ...
let destinationArray = [];
Object.keys(sourceObject).forEach(k => destinationArray[k] = sourceObject[k]);

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

-1

你可以使用PHP将JSON对象转换为数组和字符串。

$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。 - Charles Taylor

-1
      var data = [];

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

3
谢谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。如果能够提供一个[适当的解释],将大大提高它的长期价值,因为它可以展示出为什么这是一个好的解决方案,并且能够使它对未来读者的其他类似问题更有用。请编辑您的答案并加入一些解释,包括您所做的假设。 - Mogsdad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接