将对象转换为数组 - 维护命名键

Posted

技术标签:

【中文标题】将对象转换为数组 - 维护命名键【英文标题】:Convert Object to Array - maintain named keys 【发布时间】:2017-06-20 07:58:33 【问题描述】:

我正在将一个对象转换为一个数组。对象的键包含诸如“cool”之类的名称,如下所示:

var obj = 
  "cool": "Mustang",
  "family": "Station Wagon",
  "small": 
    0: "small car 1",
    1: "small car 2"
  
;

转换时返回的数组如下:

Array[3]
0:"Mustang"
1:"Station Wagon"
2:Object
    0:"small car 1" 
    1:"small car 2"

正如您在上面的数组中看到的那样,对象中的键名(例如“cool”)丢失了,取而代之的是数字。此外,数组包含一个对象,我希望这个对象是数组中的一个数组。

我希望返回的数组是这样的:

Array[3]
"cool":"Mustang"
"family":"Station Wagon"
"small": Array[2]
    0:"small car 1" 
    1:"small car 2"

非常感谢您的帮助。可以在这里找到代码:https://jsfiddle.net/v02q4sy2/8/

var obj = "cool":"Mustang","family":"Station Wagon","small":0:"small car 1",1:"small car 2"

var arr = $.map(obj, function(value, index) 
    return [value];
);

console.log(arr);

【问题讨论】:

你能告诉我们为什么你想要这个吗?这绝对是不是数组的用途。但这就是绝对对象的用途。 你误解了数组是什么。它的键是索引。 内部对象的预期结果是什么? 【参考方案1】:

根据您提供的代码,您似乎只需要在包含相应键/值对的 map 方法中返回一个对象:

Updated Example

var arr = $.map(obj, function(value, key) 
  return  [key]: value ;
);

不过,您不需要 jQuery。这是一个简单的示例,使用纯 javascript 使用 native .map() method 和 Object.keys() 从对象中检索可映射的键数组:

Updated Example

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

【讨论】:

@juanpscotto - 这是动态设置对象的键/值对的一种方法。如果括号[key] 没有像key: obj[key] 那样使用,那么键将是字符串'key',而不是传递的任何动态键值。 这并没有给出他想要的结果。它返回对象,他想要数组。【参考方案2】:

如果您处于可以使用最新 JavaScript 功能的环境中,使用 Object.entries 就很容易了。

var obj = "cool":"Mustang","family":"Station Wagon","small":0:"small car 1",1:"small car 2"

var arr = Object.entries(obj);

console.log(arr);

https://jsfiddle.net/eszfLj17/1/

Object.entries()

【讨论】:

这并没有给出他想要的结果。

以上是关于将对象转换为数组 - 维护命名键的主要内容,如果未能解决你的问题,请参考以下文章

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

将字符串转换为具有重复键的对象到数组

根据键中的子字符串将对象转换为对象数组

如何将对象数组转换为在打字稿中具有动态键的单个对象

如何将 json 对象键转换为不同的数组来删除重复项

将嵌套对象转换为数组