我有这个json:
[
{
"AF28110": 33456.75,
"AF27989": 13297.26
}
]
我希望将其转换为:
[
{ "name": "AF28110", "price": 33456.75},
{ "name": "AF27989", "price": 13297.26}
]
我尝试用.map()制作各种各样的东西但是我无法使它工作。
有没有人知道如何做到这一点? 谢谢
答案 0 :(得分:5)
您可以尝试以下代码:
let output = [];
input.forEach(obj => Object.getOwnPropertyNames(obj).forEach(key => output.push({name: key, price: obj[key]})))
Object.getOwnPropertyNames
将为您提供属性的名称,然后您可以将每个名称转换为单独的输出数组项。
答案 1 :(得分:3)
使用map
:
const data = [
{
"AF28110": 33456.75,
"AF27989": 13297.26
}
]
const out = Object.keys(data[0]).map(el => {
return { name: el, price: data[0][el] };
});
console.log(out)

答案 2 :(得分:2)
以下是使用concat
,Object.keys
和map
的方法。您可以从数组中获取每个项目,从该对象获取键,然后将每个键映射到所需的名称/价格对象。为每个项目执行此操作,然后展平结果(使用concat)。
示例:
const arr = [{
"AF28110": 33456.75,
"AF27989": 13297.26
}]
const result = [].concat(...arr.map(o => Object.keys(o).map(k => ({name: k, price: o[k]}))))
console.log(result);

答案 3 :(得分:2)
如果阵列上有多个对象,则可以使用reduce
let arr = [
{"AF28110": 33456.75,"AF27989": 13297.26},
{"AF28111": 33456.20,"AF27984": 13297.88}
];
let result = arr.reduce((c, v) => c.concat(Object.entries(v).map(o => {return {name: o[0],price: o[1]}})), []);
console.log(result);

答案 4 :(得分:0)
试试这个,
var text = '[{"AF28110": 33456.75,"AF27989": 13297.26}]';
var obj = JSON.parse(text);
var result = [];
for (i = 0; i < obj.length; i++) {
var keys = Object.keys(obj[i]);
for (j = 0; j < keys.length; j++){
result[j] = '{ "name":' +keys[j] + ', "price":' + obj[i][keys[j]]+'}';
}
}
console.log(result);
感谢。
答案 5 :(得分:0)
实现方式:
Object.keys
方法:
var jsonObj = [
{
"AF28110": 33456.75,
"AF27989": 13297.26
}
];
var res = Object.keys(jsonObj[0]).map(item => {
return {"name": item, "price": jsonObj[0][item] };
});
console.log(res);
Object.getOwnPropertyNames
方法:
var jsonObj = [
{
"AF28110": 33456.75,
"AF27989": 13297.26
}
];
var res = Object.getOwnPropertyNames(jsonObj[0]).map(item => {
return {"name": item, "price": jsonObj[0][item] };
});
console.log(res);