Массив объектов, созданный из подстрок его поля
Подскажите, пожалуйста эффектиный алгоритм на js чтобы получить из массива объектов
[
{
"id": "1"
"tag": "PS3, PS4",
...
},
{
"id": "2"
"tag": "PS4, PS5",
...
},
...
]
Вот такой массив объектов
[
{
"id": "1"
"tag": "PS3",
...
},
{
"id": "1"
"tag": "PS4",
...
},
{
"id": "2"
"tag": "PS4",
...
},
{
"id": "2"
"tag": "PS5",
...
},
...
]
Ответы (3 шт):
Автор решения: Qwertiy
→ Ссылка
var a = [
{ "id": "1", "tag": "PS3, PS4", abc: 13 },
{ "id": "2", "tag": "PS4, PS5", cde: "qqq" },
]
var res = a.flatMap(x => x.tag.split(/,\s*/).map(t => ({ ...x, tag: t })))
console.log(res)
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
Автор решения: splash58
→ Ссылка
так, для экзотики, решение на генераторе
function* generator(arr) {
for (let x of arr) {
for (let i of x.tag.split(', ')) {
x.tag = i;
yield Object.assign({}, x)
}
}
}
let arr = [
{ "id": "1", "tag": "PS3, PS4", abc: 13 },
{ "id": "2", "tag": "PS4, PS5", cde: "qqq" },
]
let res = []
for(let val of generator(arr)) {
res.push(val)
}
console.log(res)
Автор решения: Татьяна Компаниец
→ Ссылка
let array = [{
"id": "1",
"tag": "PS3, PS4",
},
{
"id": "2",
"tag": "PS4, PS5",
},
]
var processedArray = array
.map(x => {
tags = x.tag.split(",");
var tmp = [];
tags.forEach(t => tmp.push({
id: x.id,
tag: t.trim()
}));
return tmp;
})
.reduce((x, y) => x.concat(y))
console.log(processedArray);