Для того чтобы объединить свойства одноименных объектов в массивы в JavaScript, необходимо выполнить следующие шаги:
1. Создайте пустой объект, в который будет собран новый объект с объединенными свойствами.
2. Сделайте итерацию по массиву объектов с помощью цикла for
или метода forEach()
.
3. В каждой итерации, проверьте, существует ли уже объект с таким же именем в новом объединенном объекте. Если объект не существует, создайте его и присвойте значение текущего объекта с текущей итерации.
4. Если объект уже существует, выполните проверку для каждого свойства текущего объекта. Если свойство уже существует в объединенном объекте, проверьте, является ли это свойство массивом. Если это не массив, создайте массив и включите в него старое и новое значение. Если свойство уже является массивом, просто добавьте новое значение в конец массива.
5. После завершения итераций, новый объединенный объект будет содержать одноименные свойства объединенных объектов в виде массивов.
Пример кода:
// Массив объектов let objectsArray = [ { name: "John", age: 25 }, { name: "Alice", age: 30 }, { name: "John", age: 35 }, { name: "Bob", age: 40 } ]; // Пустой объединенный объект let combinedObject = {}; // Итерация по массиву объектов objectsArray.forEach(obj => { // Проверка существования объекта с таким же именем в объединенном объекте if (combinedObject.hasOwnProperty(obj.name)) { // Проверка каждого свойства текущего объекта for (let prop in obj) { if (combinedObject[obj.name].hasOwnProperty(prop)) { // Добавление нового значения в массив, если свойство уже является массивом if (Array.isArray(combinedObject[obj.name][prop])) { combinedObject[obj.name][prop].push(obj[prop]); } else { // Создание массива и добавление старого и нового значения, если свойство не является массивом combinedObject[obj.name][prop] = [combinedObject[obj.name][prop], obj[prop]]; } } else { // Присвоение значения свойству, если оно отсутствует в объединенном объекте combinedObject[obj.name][prop] = obj[prop]; } } } else { // Создание нового объекта с текущим именем, если такого объекта нет в объединенном объекте combinedObject[obj.name] = Object.assign({}, obj); } }); console.log(combinedObject);
В результате выполнения этого кода, вы увидите следующий результат в консоли:
{ John: { name: ["John", "John"], age: [25, 35] }, Alice: { name: "Alice", age: 30 }, Bob: { name: "Bob", age: 40 } }
Таким образом, свойства одноименных объектов объединены в массивы в новом объединенном объекте.