将数组的数组转换为单个对象的数组



我有一个数据结构,看起来像这样:

let a = [
["base-certificate", 60, 3, 2022],
["case-certificate", 1, 3, 2022],
["standard-certificate", 7, 3, 2022],
];

我想把它变成这样:

[{x:[3, 2022], base: 60, case:1, standard: 7}]

我尝试在数组上使用map方法:

let a = [
["base-certificate", 60, 3, 2022],
["case-certificate", 1, 3, 2022],
["standard-certificate", 7, 3, 2022],
];
let result = a.map((elem) => {
let obj = {};
elem.forEach((e, i) => {
obj["x"] = [e[2], e[3]];
obj[e[0]] = e[1];
});
return obj;
});
console.log(result);

上面的代码没有得到想要的输出。做这件事最好的办法是什么?

您不需要同时使用mapforEach,您可以删除外部映射

如果你想删除"-certificate"部分,可以使用split

像这样的东西应该可以工作

let a = [
["base-certificate", 60, 3, 2022],
["case-certificate", 1, 3, 2022],
["standard-certificate", 7, 3, 2022],
];
let obj = {};
a.forEach((e, i) => {
obj["x"] = [e[2], e[3]];
obj[e[0].split('-')[0]] = e[1];
});
console.log(obj);

map()用于创建数组。如果你只想要一个对象,你应该在循环外声明它并使用forEach()来填充它。你不需要嵌套循环。

您可以使用replace()从名称中删除-certificate

let a = [
["base-certificate", 60, 3, 2022],
["case-certificate", 1, 3, 2022],
["standard-certificate", 7, 3, 2022],
];
let obj = {};
a.forEach((e, i) => {
obj["x"] = [e[2], e[3]];
obj[e[0].replace('-certificate', '')] = e[1];
});
console.log(obj);

let a = [
["base-certificate", 60, 3, 2022],
["case-certificate", 1, 3, 2022],
["standard-certificate", 7, 3, 2022],
];
let obj = {};
a.forEach((e) => {
obj["x"] = [e[2], e[3]];
obj[e[0].replace('-certificate',"")] = e[1];
});
console.log([obj]);

最新更新