如何将具有数组索引的对象解析为具有键值对的对象数组

问题描述 投票:0回答:3
{"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"} ]}
javascript arrays object arraylist javascript-objects
3个回答
0
投票
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); 

0
投票

您可以使用像

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);

0
投票

在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);

© www.soinside.com 2019 - 2024. All rights reserved.