【问题标题】:Javascript turning object map into ArrayJavascript将对象映射转换为数组
【发布时间】:2013-05-18 05:46:00
【问题描述】:

例如,我有一个对象映射如下:

{
    "key1" : { data: "data1", extra: "none" },
    "key2" : { data: "data2", extra: "none" },
    "key3" : { data: "data3", extra: "none" },
    "key4" : { data: "data4", extra: "none" }, 
};

有没有一种方便的方法可以将其转换为类似这样的数组:

[
    { "key1" : { data: "data1", extra: "none" }},
    { "key2" : { data: "data2", extra: "none" }},
    { "key3" : { data: "data3", extra: "none" }},
    { "key4" : { data: "data4", extra: "none" }}, 
];

我有一个需要数组的函数,但我从第 3 方插件接收的数据位于对象数组中。如果有一些简单的方法可以完成两者之间的转换,那就太好了。

【问题讨论】:

  • 转换成 javascript 数组或其他语言?
  • +1 @Unipartisandev 一个 javscript 数组。
  • 您是否要创建像["key1", { data: "data1", extra: "none" }] 这样的多维数组?我注意到你使用了{ "key1", { data: "data1", extra: "none" }},我是无效的。
  • 不知何故,我相当怀疑您的函数是否真的需要第二个示例中的表单,因为这很难做任何事情。是的,它是一个数组,但可能不是您的函数想要的那种数组。它是一个对象数组,每个对象都没有已知的属性,因此该函数必须遍历每个对象中的所有属性才能找出它有什么。这是为函数设计参数的糟糕方式,因此要么函数设计不佳,要么你不了解它真正想要什么。
  • @jfriend00 实际上,我两者都需要。我有两个函数可供选择,其中一个的输入是我提出的问题,另一个是您正在谈论的多维数组。我再问一个关于多维数组的问题。

标签: javascript


【解决方案1】:

遍历对象中的属性并将它们推送到数组中:

var myArray=[];
for (k in myObj) {
    if(myObj.hasOwnProperty(k)){
        var newObj = {};
        newObj[k] = myObj[k];
        myArray.push(newObj);
    }
}

【讨论】:

  • 虽然你回答了这个问题,但我很怀疑这种形式的数据是否真的是函数想要的。
  • @dk123 请注意,keys 的答案依赖于 ES5,IE8 及更早版本不支持此功能。你可以看到完整的兼容性表here
  • +1 感谢您的链接,我不知道。考虑到跨主要浏览器的兼容性,我删除了我的最后一条评论并最终确定为我的答案。
  • @dk123 没问题,记得在使用最近添加的任何酷炫的 JS 功能之前检查该站点。顺便说一句,您不需要每次都在评论中提及您 + 或 -1d 的内容,投票应该是匿名的 :)
【解决方案2】:

更简洁(在 ECMAscript 5 中):

function toArray (obj) {
  return Object.keys (obj).map (function (k) {
    var v = {}; v[k] = obj[k]; return v; 
  });
}

【讨论】:

    猜你喜欢
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多