我有一个这样的对象:
{
"A": [ "-4927","8779","-9971","-23767" ],
"B": [ "-10617","-1456","3131","259" ],
"C": [ "-5185","1168","21501","18989" ],
"D": [ "2010","5664","2148","-674" ]
}
我想转换为:
[
{
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"]
}
]
我使用了以下方法:
var newData = [];
$.each($.parseJSON(data), function(k, v) {
newData['name'] = k;
newData['data'] = v;
});
但它只将最后一个密钥对的值存储为newData。那是
name: 'D',
data: ["2010","5664","2148","-674"]
我知道它会覆盖以前的数据,只存储它最后获得的数据。但是我不能解决这个问题。
有什么帮助吗?
发布于 2018-09-14 23:06:14
您将属性name
和data
直接分配给newData
,而不是将对象作为数组推入其中:
将您的循环更改为:
var newData = [];
$.each($.parseJSON(data), function(k, v) {
const myNewData = {
name: k,
data: v
}
newData.push(myNewData);
});
发布于 2018-09-14 23:09:14
您可以使用map
来完成此操作
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,但通常使用可重用的代码段编写程序会更好
const newData =
Object.entries(oldData).map(([ name, data ]) => ({ name, data }))
jQuery可以使用$.map在对象上进行映射-注意不同的lambda
const newData =
$.map(oldData, (data, name) => ({ name, data }))
发布于 2018-09-14 23:08:09
您可以使用for in
循环并push
每个元素。
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)
https://stackoverflow.com/questions/52334619
复制相似问题