Как jquery или чистым js объединить два объекта

Прошу помощи

Есть два объекта:

var arr1 = {
    "0": "",
    "1": {"date": "1970-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
};

var arr2 = {
    "0": "",
    "1": {"date": "1975-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "2": {"date": "1971-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "3": {"date": "1972-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "4": {"date": "1973-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
};

Мне нужно объединить их в один arr3 что бы получилось следующее:

var arr3 = {
    "0": "",
    "1": {"date": "1975-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "2": {"date": "1971-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "3": {"date": "1972-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "4": {"date": "1973-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "5": "",
    "6": {"date": "1970-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
};

Пробовал использовать:

$.extend(true, arr2, arr1);

Но этот способ мне не подходит так как при нём происходит объединение свойств с одинаковыми индексами 0, 1. И по итогу получается

0: ""
1: {date: "1970-01-01", name1: "0", name2: "0", name3: "0", name4: "0"}
2: {date: "1971-01-01", name1: "0", name2: "0", name3: "0", name4: "0"}
3: {date: "1972-01-01", name1: "0", name2: "0", name3: "0", name4: "0"}
4: {date: "1973-01-01", name1: "0", name2: "0", name3: "0", name4: "0"}

Мне нужно что бы один объект продолжил другой с изменением индексов 0,1 на 5,6 и тд


Ответы (2 шт):

Автор решения: Igor

function collect(arr) {
  let count = 0;
  return arr.reduce((r, i) => (Object.keys(i).forEach(k => r[count++] = i[k]), r), {});
}

var arr1 = {
    "0": "",
    "1": {"date": "1970-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
};

var arr2 = {
    "0": "",
    "1": {"date": "1975-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "2": {"date": "1971-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "3": {"date": "1972-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "4": {"date": "1973-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
};

const r = collect([arr1, arr2]);
console.log(r);

→ Ссылка
Автор решения: WalkMess

Можно так, но мы перезаписываем объект, это важно! Уже существующее (например key) - будут перезаписаны.

var obj1 = {
    "0": "",
    "1": {"date": "1970-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
};

var obj2 = {
    "0": "",
    "1": {"date": "1975-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "2": {"date": "1971-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "3": {"date": "1972-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
    "4": {"date": "1973-01-01", "name1": "0", "name2": "0", "name3": "0", "name4": "0"},
}; 

const objSumm = {...obj1, ...obj2}
console.log(objSumm);

→ Ссылка