@kachurinets

Как из двух массивов сделать объект с новыми свойствами?

Есть к примеру такой массив обьектов

items = [
    {
      id: "1",
      name: "тест1",
      parents_names: ["Московская", "Орехово-Зуевский"],
      parents_levels: [1, 3]
    },
    {
      id: "2",
      name: "Тест2",
      parents_names: ["Карелия", "Прионежский", "Центральный"],
      parents_levels: [1, 3, 7]
    },
    {
      id: "3",
      name: "Тест3",
      parents_names: ["Санкт-Питер"],
      parents_levels: [1]
    },
];


В parents_levels у нас находится инфа, о том, что именно пришло в parents_names.
тоесть к примеру 1 = регион, 3 = район, 7= улица и тому подобное.

мне на выходе нужно получить новый обьект такого формата
newItems = [
    {
      id: "1",
      name: "тест1",
      region: "Московская",
      area: "Орехово-Зуевский"
    },
    {
      id: "2",
      name: "тест2",
      region: "Московская",
      area: "Орехово-Зуевский",
      street: "Центральный"
    },
    {
      id: "3",
      name: "тест3",
      region: "Санкт-Питер",
    }
    ];


Подскажите как это реализовать?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const t = {
  1: 'region',
  3: 'area',
  7: 'street',
};

const newItems = items.map(n => ({
  id: n.id,
  name: n.name,
  ...n.parents_names.reduce((acc, name, i) => (
    acc[t[n.parents_levels[i]]] = name,
    acc
  ), {}),
}));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Это не объект, а новый массив.
Получите:
var items = [
    {
      id: "1",
      name: "тест1",
      parents_names: ["Московская", "Орехово-Зуевский"],
      parents_levels: [1, 3]
    },
    {
      id: "2",
      name: "Тест2",
      parents_names: ["Карелия", "Прионежский", "Центральный"],
      parents_levels: [1, 3, 7]
    },
    {
      id: "3",
      name: "Тест3",
      parents_names: ["Санкт-Питер"],
      parents_levels: [1]
    },
];

var data = {
	1 : 'region',
	3 : 'area',
	7 : 'street'

}

console.log(items.map(function(i) {
	i.parents_levels.forEach(function(p, ind) {
		i[data[p]] = i.parents_names[ind];
	})
	delete i.parents_names;
	delete i.parents_levels;
	return i;
}));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы