首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript:转换对象结构

JavaScript:转换对象结构
EN

Stack Overflow用户
提问于 2018-09-14 23:02:38
回答 5查看 635关注 0票数 6

我有一个这样的对象:

代码语言:javascript
复制
{
  "A": [ "-4927","8779","-9971","-23767" ],
  "B": [ "-10617","-1456","3131","259" ],
  "C": [ "-5185","1168","21501","18989" ],
  "D": [ "2010","5664","2148","-674" ]
}

我想转换为:

代码语言:javascript
复制
[
  {
    name: 'A',
    data: ["-4927","8779","-9971","-23767"]
  }, {
    name: 'B',
    data: ["-10617","-1456","3131","259"]
  }, {
    name: 'C',
    data: ["-5185","1168","21501","18989"]
  }, {
    name: 'D',
    data: ["2010","5664","2148","-674"]
  }
]

我使用了以下方法:

代码语言:javascript
复制
var newData = [];
$.each($.parseJSON(data), function(k, v) {
  newData['name'] = k;
  newData['data'] = v;
});

但它只将最后一个密钥对的值存储为newData。那是

代码语言:javascript
复制
name: 'D',
data: ["2010","5664","2148","-674"]

我知道它会覆盖以前的数据,只存储它最后获得的数据。但是我不能解决这个问题。

有什么帮助吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-09-14 23:06:14

您将属性namedata直接分配给newData,而不是将对象作为数组推入其中:

将您的循环更改为:

代码语言:javascript
复制
var newData = [];
$.each($.parseJSON(data), function(k, v) {
        const myNewData = {
            name: k,
            data: v
        }
        newData.push(myNewData);
});
票数 8
EN

Stack Overflow用户

发布于 2018-09-14 23:09:14

您可以使用map来完成此操作

代码语言:javascript
复制
const oldData =
  { "A": [ "-4927","8779","-9971","-23767" ]
  , "B": [ "-10617","-1456","3131","259" ]
  , "C": [ "-5185","1168","21501","18989" ]
  , "D": [ "2010","5664","2148","-674" ]
  }

const newShape = ([ name, data ]) =>
  ({ name, data })

const newData =
  Object.entries(oldData).map(newShape)

console.log(newData)
// [ { name: "A", data: [ "-4927","8779","-9971","-23767" ] }, ... ]

如果愿意,您可以内联编写lambda,但通常使用可重用的代码段编写程序会更好

代码语言:javascript
复制
const newData =
  Object.entries(oldData).map(([ name, data ]) => ({ name, data }))

jQuery可以使用$.map在对象上进行映射-注意不同的lambda

代码语言:javascript
复制
const newData =
  $.map(oldData, (data, name) => ({ name, data }))
票数 6
EN

Stack Overflow用户

发布于 2018-09-14 23:08:09

您可以使用for in循环并push每个元素。

代码语言:javascript
复制
var obj = {
    "A":["-4927","8779","-9971","-23767"],
    "B":["-10617","-1456","3131","259"],
    "C":["-5185","1168","21501","18989"],
    "D":["2010","5664","2148","-674"]
  }

var newArr = [];

  for(p in obj){
    newArr.push({"name":p,"data":obj[p]})
  }

  console.log(newArr)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52334619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档