Преобразование массива строк в объект массива с ключами и значениями

#javascript #arrays

#javascript #массивы

Вопрос:

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

 const arr = [
  "name:Adam age:20 height:180cm",
  "name:Sally age:30 height:170cm",
  "name:Mike age:35 height:185cm",
  "name:David age:40 height:190cm"
];
 

в этот массив, который включает объект с ключами и значениями, подобными приведенному ниже:

 var obj = [
  {name:'Adam', age:20, height:'180cm'},
  {name:'Sally', age:30, height:'170cm'},
  {name:'Mike', age:35, height:'185cm'},
  {name:'David', age:40, height:'190cm'}
];
 

Спасибо!

Комментарии:

1. Что вы пробовали до сих пор?

2. Я попробовал использовать цикл for для инициализации значений и ключа после разделения строк. А также я попробовал Object.assign

3. Вы должны включить в вопрос то, что вы пробовали.

Ответ №1:

 const arr = [
  "name:Adam age:20 height:180cm",
  "name:Sally age:30 height:170cm",
  "name:Mike age:35 height:185cm",
  "name:David age:40 height:190cm"
]

let result = arr.map(e => Object.fromEntries(e.split(' ').map(n=>n.split(":"))))

console.log(result) 

Комментарии:

1. Это будет работать, если : , конечно, в данных нет пробелов или двоеточий, но это проблема проверки. Лучше всего было бы избегать сериализации данных в этом «формате» с самого начала.

2. Это было больше предназначено для OP, этот ответ хорош для заданной проблемы 🙂

Ответ №2:

Для получения результата вы можете использовать сопоставление массива и метод разделения.

 const arr = [
  'name:Adam age:20 height:180cm',
  'name:Sally age:30 height:170cm',
  'name:Mike age:35 height:185cm',
  'name:David age:40 height:190cm',
];

const ret = arr.map((x) => {
  const obj = {};
  const a = x.split(' ');
  a.forEach((y) => {
    const [key, value] = y.split(':');
    obj[key] = key === 'age' ?  value : value;
  });
  return obj;
});
console.log(ret); 

Ответ №3:

Извините за плохое название, так как я делал это в спешке, но что-то вроде этого должно помочь:

 s = "name:Adam age:20 height:180cm";
a = s.split(" ");
c = a.map(item => {
    pair = item.split(":");
    key = """   pair[0]   """;
    value = """   pair[1]   """;
    return key   ":"   value;
});
s = c.join(",");
s = "{"   s   "}";
o = JSON.parse(s);
console.log(o) 

В конце o должен быть объект, который вы хотите.

Комментарии:

1. Я взял на себя смелость превратить ваш код в исполняемый фрагмент. К вашему сведению, для кода HTML / JS доступна кнопка «Сниппет». И добро пожаловать в Stack Overflow!

2. Спасибо! В конце концов я понял, что могу это сделать, когда увидел, что мой ответ — единственный, который этого не делает.