Преобразовать массив строк в объекты - PullRequest
0 голосов
/ 19 июня 2020

У меня есть массив строк, каждая из которых содержит значения, разделенные запятыми.

Я хотел бы преобразовать это в массив объектов.

Например, у меня есть:

var myarray = [
 "a1,b1,c1,d1",
 "a2,b2,c2,d2",
 "a3,b3,c3,d3"
]

... что должно закончиться как:

[
  {
    "field1": "a1",
    "field2": "b1",
    "field3": "c1",
    "field3": "d1"
  },
  {
    "field1": "a2",
    "field2": "b2",
    "field3": "c2",
    "field2": "d2"
  },
  {
    "field1": "a3",
    "field2": "b3",
    "field3": "c3",
    "field3": "d3"
  },
]

Я пробовал разные подходы, например Object.assign и оператор распространения. Но похоже, что должен быть более простой способ сделать это, используя деструктуризацию или другой подход.

Ответы [ 2 ]

3 голосов
/ 19 июня 2020

var myarray = [
 "a1,b1,c1,d1",
 "a2,b2,c2,d2",
 "a3,b3,c3,d3"
];

const makeProperties = arr => arr.map(item => item.split(',').reduce((result, splitItem, index) => {
  result['field' + (index + 1)] = splitItem;
  return result;
}, {}));

console.log(makeProperties(myarray));

Вот демонстрация использования слов для чисел

var myarray = [
 "a1,b1,c1,d1",
 "a2,b2,c2,d2",
 "a3,b3,c3,d3"
];

const numbers = ['one', 'two', 'three', 'four'];

const makeProperties = arr => arr.map(item => item.split(',').reduce((result, splitItem, index) => {
  result[numbers[index]] = splitItem;
  return result;
}, {}));

console.log(makeProperties(myarray));
1 голос
/ 19 июня 2020

Вы можете создать двойную карту , сопоставив массив, затем их значения и заменив свойства по умолчанию на новые.

var myarray = ["a1,b1,c1,d1", "a2,b2,c2,d2", "a3,b3,c3,d3"];

const fromArrayToObjects = (array) =>
  array.map((value, index) => {
    const o = Object.assign({}, value.split(","));
    Object.keys(o).map((key, i) => {
      Object.defineProperty(
        o,
        "field" + (i + 1),
        Object.getOwnPropertyDescriptor(o, key)
      );
      delete o[key];
    });
    return o;
  });
console.log(fromArrayToObjects(myarray));
...