将对象转换为数组 - 保留命名键

8

我正在将一个对象转换为数组。该对象的键包含诸如“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);

2
你能告诉我们为什么你想要这个吗?数组绝对不是用来做这件事的。但是对象绝对是用来做这件事的。 - Sebastian Simon
你误解了数组的含义。它的键是索引。 - jmargolisvt
内部对象的预期结果是什么? - guest271314
2个回答

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

更新示例

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

你不需要使用jQuery。以下是一个简单的例子,使用原生JavaScript利用.map()方法Object.keys()来从对象中检索可映射键数组:

更新示例

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

@juanpscotto - 这是一种动态设置对象键值对的方法。如果没有使用方括号 [key],而是像 key: obj[key] 那样使用,则键将成为字符串 'key',而不是传递的任何动态键值。 - Josh Crozier
这并不会给他想要的相同结果。它返回对象,而他想要的是数组。 - MrEduar

3

如果您可以使用最新的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()


1
这不会给他想要的相同结果。 - MrEduar

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