我有像这样的复杂 json:
const lstCountry = {
"cols": ["id", "countryName", "area"],
"data": [
["1", "Russia", "17098242"],
["2", "Canada", "9970610"],
["3", "China", "9640821"],
["4", "United States", "9629091"],
["5", "Brazil", "8514877"],
["6", "Australia", "7741220"],
["7", "India", "3287263"],
["8", "Argentina", "2780400"],
["9", "Kazakhstan", "2724900"],
["10", "Sudan", "2505813"]
]
};
现在我想转换为简单数组作为输出,如下所示:
const countryList = [
{ "id": "1", "countryName": "Russia", "area": "17098242" },
{ "id": "2", "countryName": "Canada", "area": "9970610" },
{ "id": "3", "countryName": "China", "area": "9640821" },
{ "id": "4", "countryName": "United States", "area": "9629091" },
{ "id": "5", "countryName": "Brazil", "area": "8514877" },
{ "id": "6", "countryName": "Australia", "area": "7741220" },
{ "id": "7", "countryName": "India", "area": "3287263" },
{ "id": "8", "countryName": "Argentina", "area": "2780400" },
{ "id": "9", "countryName": "Kazakhstan", "area": "2724900" },
{ "id": "10", "countryName": "Sudan", "area": "2505813" },
];
我已经在下面尝试过,但使用索引作为键获得了输出,那么我如何使用 cols 数组作为键
和另一个 data 数组作为值来转换该键
并使用这些键和值组合生成我自己的数组。
或者有没有简单的方法来归档这个,比如使用map、reduce?
已经尝试过这个:
let mainData = [];
for (let i = 1; i < Object.keys(data).length; i++) {
const eleData = data[Object.keys(data)[i]];
for (let j = 0; j < eleData.length; j++) {
const element = Object.assign({}, eleData[j]);
mainData.push(element);
};
};
console.log('mainData:', mainData)
尝试的函数输出:
const mainData = [
{ "0": "1", "1": "Russia", "2": "17098242" },
{ "0": "2", "1": "Canada", "2": "9970610" },
{ "0": "3", "1": "China", "2": "9640821" },
{ "0": "4", "1": "United States", "2": "9629091" },
{ "0": "5", "1": "Brazil", "2": "8514877" },
{ "0": "6", "1": "Australia", "2": "7741220" },
{ "0": "7", "1": "India", "2": "3287263" },
{ "0": "8", "1": "Argentina", "2": "2780400" },
{ "0": "9", "1": "Kazakhstan", "2": "2724900" },
{ "0": "10", "1": "Sudan", "2": "2505813" },
];
最佳答案
您可以简单地map
每个对象并使用reduce
创建与每列相关的每个对象:
const lstCountry = {
"cols": ["id", "countryName", "area"],
"data": [
["1", "Russia", "17098242"],
["2", "Canada", "9970610"],
["3", "China", "9640821"],
["4", "United States", "9629091"],
["5", "Brazil", "8514877"],
["6", "Australia", "7741220"],
["7", "India", "3287263"],
["8", "Argentina", "2780400"],
["9", "Kazakhstan", "2724900"],
["10", "Sudan", "2505813"]
]
};
const { cols, data } = lstCountry
console.log(data.map(arr => arr.reduce((a, e, i) => (a[cols[i]] = e, a), {})))
编辑:作为函数:
const fn = (cols, data) => data.map(arr => arr.reduce((a, e, i) => (a[cols[i]] = e, a), {}))
console.log(fn(['test'], [[1],[2],[3],[4]]))
console.log(fn(['test', 'true'], [[1,1],[2,1],[3,1],[4,1]]))
该解决方案是最注重性能的,因为根据此 JSPerf 只有两个循环,而不是三个。 :
关于javascript - 使用javascript将复杂数组转换为简单数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57490037/