将键和值映射到 Javascript 中的新键
Mapping key and value to new keys in Javascript
字典数组应转换为更简单的形式。
data = [{A:1},{B:2},{C:3}]
data = {A: 1, B: 2}
data = ["0":{ A : 1, B : 2 , C : 3}]
两者是完全不同的数据集。我正在尝试将其映射为以下格式。
上面应该变成
data = [
{
name: "A",
y: 1
},
{
name: "B",
y: 2
},
{
name: "C",
y: 3
}
];
我尝试了下面的方法,但它是错误的
name = {}
data.forEach(function(k,x){
return name['name'] = k , name["y"] = x
})
请建议我一个更好的方法。
map
每个对象的 entries
提取键和值,并且 return 具有 name
和 y
键的对象:
const data = [{A:1},{B:2},{C:3}]
const output = data.map(item => {
const [name, y] = Object.entries(item)[0];
return { name, y };
});
console.log(output);
您可以检查数据格式,如果它不是数组,则构建一个并通过获取对象来减少数组,并为每个 key/value 结果集创建一个新对象。
function simple(data) {
return (Array.isArray(data) ? data : [data]).reduce((r, o) => [...r, ...Object.entries(o).map(([name, y]) => ({ name, y }))], []);
}
console.log(simple([{ A: 1 }, { B: 2 }, { C: 3, D: 4 }]));
console.log(simple({ A: 1, B: 2 }));
.as-console-wrapper { max-height: 100% !important; top: 0; }
如果保证键(A、B等)在整个数组中是唯一的,那么一切都会变得简单。
const data = [{A:1},{B:2},{C:3}];
const merged = Object.assign({}, ...data);
const newData = Object.entries(merged)
.map(([name, y]) => ({ name, y }));
console.log(newData);
但是,如果密钥不能保证唯一,请参考 CertainPerformance 的回答。
我会说,使用得到广泛支持的 Object.keys()
let data = [{A:1},{B:2},{C:3}];
data = Object.assign({}, ...data);
data = Object.keys(data).map(key => ({ name: key, y: data[key] }));
console.log(data);
you can implement like this
var data = [{A:1},{B:2},{C:3}];
var reformattedArra = data.map(obj => {
let val = {};
val.name = Object.keys(obj)[0];
val.y = obj[Object.keys(obj)[0]];
return val;
})
console.log(JSON.stringify(reformattedArra));
字典数组应转换为更简单的形式。
data = [{A:1},{B:2},{C:3}]
data = {A: 1, B: 2}
data = ["0":{ A : 1, B : 2 , C : 3}]
两者是完全不同的数据集。我正在尝试将其映射为以下格式。 上面应该变成
data = [
{
name: "A",
y: 1
},
{
name: "B",
y: 2
},
{
name: "C",
y: 3
}
];
我尝试了下面的方法,但它是错误的
name = {}
data.forEach(function(k,x){
return name['name'] = k , name["y"] = x
})
请建议我一个更好的方法。
map
每个对象的 entries
提取键和值,并且 return 具有 name
和 y
键的对象:
const data = [{A:1},{B:2},{C:3}]
const output = data.map(item => {
const [name, y] = Object.entries(item)[0];
return { name, y };
});
console.log(output);
您可以检查数据格式,如果它不是数组,则构建一个并通过获取对象来减少数组,并为每个 key/value 结果集创建一个新对象。
function simple(data) {
return (Array.isArray(data) ? data : [data]).reduce((r, o) => [...r, ...Object.entries(o).map(([name, y]) => ({ name, y }))], []);
}
console.log(simple([{ A: 1 }, { B: 2 }, { C: 3, D: 4 }]));
console.log(simple({ A: 1, B: 2 }));
.as-console-wrapper { max-height: 100% !important; top: 0; }
如果保证键(A、B等)在整个数组中是唯一的,那么一切都会变得简单。
const data = [{A:1},{B:2},{C:3}];
const merged = Object.assign({}, ...data);
const newData = Object.entries(merged)
.map(([name, y]) => ({ name, y }));
console.log(newData);
但是,如果密钥不能保证唯一,请参考 CertainPerformance 的回答。
我会说,使用得到广泛支持的 Object.keys()
let data = [{A:1},{B:2},{C:3}];
data = Object.assign({}, ...data);
data = Object.keys(data).map(key => ({ name: key, y: data[key] }));
console.log(data);
you can implement like this
var data = [{A:1},{B:2},{C:3}];
var reformattedArra = data.map(obj => {
let val = {};
val.name = Object.keys(obj)[0];
val.y = obj[Object.keys(obj)[0]];
return val;
})
console.log(JSON.stringify(reformattedArra));