{"SubmitBy":"SK", "Students[0].name":"Jhon", "Students[0].age":"15", "Students[1].name":"Sam", "Students[1].age":"16", "Students[2].name":"Tom", "Students[2].age":15}
期待这样的结果
{SubmitBy:"SK", Students:[{name:"Jhon", age:"15"},{name:"Sam", age:"16"},{name:"Tom", age:"15"} ]}
const originalData = {"SubmitBy":"SK", "Students[0].name":"Jhon", "Students[0].age":"15", "Students[1].name":"Sam", "Students[1].age":"16", "Students[2].name":"Tom", "Students[2].age":15};
const transformedData = { SubmitBy: originalData.SubmitBy, Students: [] };
for (let i = 0; i < 3; i++) {
const student = {
name: originalData[`Students[${i}].name`],
age: originalData[`Students[${i}].age`].toString(),
};
transformedData.Students.push(student);
}
console.log(transformedData);
dot-prop
这样的库来实现这一点,代码如下:
import { setProperty } from 'dot-prop';
const input = {
SubmitBy: 'SK',
'Students[0].name': 'Jhon',
'Students[0].age': '15',
'Students[1].name': 'Sam',
'Students[1].age': '16',
'Students[2].name': 'Tom',
'Students[2].age': 15
};
const output = {};
for (const [key, value] of Object.entries(input)) {
setProperty(output, key, value);
}
console.log(output);
在JavaScript中,要将一个数组索引的对象解析为一个键值对的对象数组,可以使用如下函数:
function parseObject(input) {
const result = {};
Object.keys(input).forEach((key) => {
const index = key.indexOf("[");
if (index > -1) {
const root = key.substring(0, index);
const subKey = key.substring(index + 1, key.length - 1);
const indexNum = parseInt(subKey, 10);
if (!result[root]) {
result[root] = [];
}
if (!result[root][indexNum]) {
result[root][indexNum] = {};
}
result[root][indexNum][subKey.substring(subKey.indexOf(".") + 1)] = input[key];
} else {
result[key] = input[key];
}
});
return result;
}
const input = {"SubmitBy":"SK", "Students[0].name":"Jhon", "Students[0].age":"15", "Students[1].name":"Sam", "Students[1].age":"16", "Students[2].name":"Tom", "Students[2].age":15};
const output = parseObject(input);
console.log(output);