#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. Спасибо! В конце концов я понял, что могу это сделать, когда увидел, что мой ответ — единственный, который этого не делает.