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

Posted

技术标签:

【中文标题】将带有数字键的 JavaScript 对象转换为数组【英文标题】:Converting JavaScript object with numeric keys into array 【发布时间】:2014-01-19 19:09:54 【问题描述】:

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


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

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

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

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

【问题讨论】:

重复:***.com/questions/6857468/… 一个单纯的循环并不是复杂的逻辑,顺便说一句:)) 【参考方案1】:

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]; 【参考方案2】:

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

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

http://jsfiddle.net/Qq2aM/

【讨论】:

【参考方案3】:

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


console.log(array)

DEMO

【讨论】:

【参考方案4】:

没有什么能比得上“JSON 对象”——JSON 是一种序列化符号。

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

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

【讨论】:

谢谢 - 就像魅力一样。但是如何使它对内部对象也做同样的事情(对象中的对象)?内部对象也应该成为根级别数组的平面成员(以便可以将它们传递到 datatables.net 等) +1:“没有什么比得上“JSON 对象”——JSON 是一种序列化符号。” - 我不敢相信我必须听多少遍才能完全理解它。【参考方案5】:

你只是这样做

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

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


console.log(arr);

DEMO

【讨论】:

【参考方案6】:

试试这个:

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

【讨论】:

您的解决方案将是这里提出的所有解决方案中最慢的一个......对业务代码不利;)【参考方案7】:

使用 jQuery 的 $.map 实际上非常简单

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

FIDDLE

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

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

FIDDLE

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

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

var arr = Object.values(obj);

【讨论】:

@adeneo 先生,您能否提供一些有关 htis 方法的解释。 @adeneo aka Mr.burns...感谢您的快速解决方案。 @NikhilAgrawal 这里的诀窍是使用 Object.keys(),它返回对象的键(= 它自己的可枚举属性)作为数组。然后我们可以使用 array.map 将每个键替换为新数组中对应的值。 这是一个答案,但不是很友好。 这个问题并不明确,但我假设对象的键本质上是数组的索引,它们是 (0,1,2,3)。只是指出人们应该知道这种方法不保证数组中的任何顺序;如果键是索引,那么您需要显式地对它们进行排序,以便以正确的顺序构建数组。【参考方案8】:

假设您的值如下所示

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 编码的字符串时,除了我在此提到的方法之外,此页面上的其他方法似乎都不完全适合我。

【讨论】:

【参考方案9】:

使用原始 javascript,假设您有:

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

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

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

输出:

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

【讨论】:

【参考方案10】:

这是一个示例,说明如何获取对象数组,然后对数组进行排序。

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

【讨论】:

【参考方案11】:

不确定我在这里缺少什么,但只需尝试以下代码即可。我在这里有什么遗漏吗?

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

【讨论】:

【参考方案12】:

这是最好的解决方案。我想是的。

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

【讨论】:

【参考方案13】:
      var data = [];

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

【讨论】:

感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation would greatly improve its long-term value 通过展示为什么这是一个很好的解决问题的方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。【参考方案14】:

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

【讨论】:

【参考方案15】:

您可以使用 PHP 将 json Object 转换为 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。【参考方案16】:

您可以将Object.assign() 与空数组文字[] 一起用作target

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


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

console.log(output)

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

【讨论】:

【参考方案17】:

公认的解决方案期望键从 0 开始并且是连续的 - 它将值放入数组中,但在途中会丢失索引。

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

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

【讨论】:

以上是关于将带有数字键的 JavaScript 对象转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有对象作为键的 Ruby 哈希对象作为 Map 对象发送到前端 Javascript

JavaScript之类型转换

Django 将带有外键的查询集转换为 JSON

带有对象和键的 UIPicker 使用 JSON

javascript之自增自减典型运算(易错)

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