Как объединить два объекта (ассоциативный массив) с одним и тем же ключом в один объект

1

У меня есть два объекта:

var arr= [
  0: { selectedAns: "test answer 1", id: "28", status: "answered" }
]

а также:

var answerList = [
  0: { selectedAns: "test answer 2 ques 5", id: "27", status: "answered" },
  1: { selectedAns: "test answer 3 ques 6", id: "29", status: "answered"}
]

Когда я это делаю:

arr1.push(arr);
arr1.push(answerList);

Я получаю этот результат:

var arr1=[0:{
    0:{selectedAns: "test answer 2 ques 5", id: "27", status: "answered"}
}
1:{
    0:{selectedAns: "test answer 1", id: "28", status: "answered"}
    1:{selectedAns: "test answer 3 ques 6", id: "29", status: "answered"}
}]

Но я хочу что-то вроде этого:

    var arr1=[
    0:{selectedAns: "test answer 2 ques 5", id: "27", status: "answered"}

    1:{selectedAns: "test answer 1", id: "28", status: "answered"}

    2:{selectedAns: "test answer 3 ques 6", id: "29", status: "answered"}
]

Что я делаю неправильно? Благодарю.

Примечание. Я удаляю дубликаты из объектов перед слиянием двух объектов, даже если любой ключ имеет дублирующее значение, как здесь, в ключе состояния. Тем не менее, мне нужно объединить оба объекта. По моему требованию только ключ id должен быть уникальным, поэтому мне нужен способ объединить два объекта, как указано выше.

  • 0
    Избавьтесь от всего показанного синтаксиса 0: 1: т.д. ... ни один из этих синтаксисов не является допустимым. Массив объектов выглядит как [{},{},{}]
  • 0
    Похоже, у вас есть два массива, arr и answerList . Затем вы пытаетесь обратиться к тому, что называется arr1 . Что это такое?
Показать ещё 2 комментария
Теги:
arrays

2 ответа

2
Лучший ответ

Вы можете использовать Array#concat, для которого требуется назначение нового массива.

var arr = [{ selectedAns: "test answer 1", id: "28", status: "answered" }],
    answerList = [{ selectedAns: "test answer 2 ques 5", id: "27", status: "answered" }, { selectedAns: "test answer 3 ques 6", id: "29", status: "answered" }];
    
arr = arr.concat(answerList);

console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Или используйте Array#push с Function#apply для принятия массива в качестве параметра.

var arr = [{ selectedAns: "test answer 1", id: "28", status: "answered" }],
    answerList = [{ selectedAns: "test answer 2 ques 5", id: "27", status: "answered" }, { selectedAns: "test answer 3 ques 6", id: "29", status: "answered" }];
    
Array.prototype.push.apply(arr, answerList);

console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }

С ES6 вы можете нажать значения с синтаксисом распространения ... который принимает массив как параметры.

var arr = [{ selectedAns: "test answer 1", id: "28", status: "answered" }],
    answerList = [{ selectedAns: "test answer 2 ques 5", id: "27", status: "answered" }, { selectedAns: "test answer 3 ques 6", id: "29", status: "answered" }];
    
arr.push(...answerList);

console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }
  • 0
    где ключи массива {0:.....,1:......,2:.....}
  • 0
    @ M0ns1f, индексы не являются допустимыми частями массива в javascript. Я предполагаю, что это только часть отображения массивов в консоли.
Показать ещё 2 комментария
0

Ну Использование JavaScript вы можете нажать answerList массив в arr1, используя для циклы увидеть эту функцию:

var arr1 = [];
var arr={0:{selectedAns: "test answer 1", id: "28", status: "answered"}};

var answerList={0:{selectedAns: "test answer 2 ques 5", id: "27", status: "answered"},1:{selectedAns: "test answer 3 ques 6", id: "29", status: "answered"}};

arr1.push(arr);//push first array
pashingarray(answerList);

//function to push an array
function pashingarray(arrtobepush)
{
var lenghtar = 0;
for(var key in arrtobepush) {
    if(arrtobepush.hasOwnProperty(key)){
       lenghtar++;//get the lenght of the array
    }
}
for(var i = 0;i<lenghtar;i++)//loop the array to push the content
{
  var keytopush = i+1;
  var arraytopush = {[keytopush]:arrtobepush[i]};
  arr1.push(arraytopush);
}
}

console.log(arr1);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню