Как объединить эти два массива JavaScript

#javascript #arrays #object

#javascript #массивы #объект

Вопрос:

Ниже у меня есть два массива JavaScript, оба из которых имеют одинаковое количество записей, но это число может варьироваться.

 [{"branchids":"5006"},{"branchids":"5007"},{"branchids":"5009"}]      
[{"branchnames":"GrooveToyota"},{"branchnames":"GrooveSubaru"},{"branchnames":"GrooveFord"}] 
  

Я хочу объединить эти два массива, чтобы получить

 [{"5006":"GrooveToyota"},{"5007":"GrooveSubaru"},{"5008":"GrooveFord"}]
  

Я не уверен, как выразить это словами, но, надеюсь, кто-нибудь поймет. Я хотел бы сделать это с двумя массивами произвольной длины (хотя оба имеют одинаковую длину).

Любые советы приветствуются.

Комментарии:

1. Они гарантированно будут в том же порядке?

2. Извините, я только что отредактировал это, это была опечатка.

3. В вашем примере они все 5006 , что делает его еще проще: (

4. Да, это была опечатка, о которой я говорил.

Ответ №1:

Это своего рода zip:

 function zip(a, b) {
    var len = Math.min(a.length, b.length),
        zipped = [],
        i, obj;
    for (i = 0; i < len; i  ) {
        obj= {};
        obj[a[i].branchids] = b[i].branchnames;
        zipped.push(obj);
    }
    return zipped;
}
  

Пример (использует консоль.регистрируйте пользователей ie)

Комментарии:

1. Вы имеете в виду «i» вместо [0] в четвертой строке снизу?

2. Использование [0] там не будет работать, так как он будет получать GrooveToyota и 5006 каждый раз. Также есть синтаксическая ошибка. Вот рабочая версия вашего zip-подхода: jsfiddle.net/K5Mur

3. @роберт, вы правы, сэр. Но это была опечатка, которую я с тех пор исправил.

Ответ №2:

 var ids = [{"branchids":"5006"},{"branchids":"5007"},{"branchids":"5009"}];
var names = [{"branchnames":"GrooveToyota"},{"branchnames":"GrooveSubaru"},{"branchnames":"GrooveFord"}];
var combined = [];

for (var i = 0; i < ids.length; i  ) {
    var combinedObject = {};
    combinedObject[ids[i].branchids] = names[i].branchnames;
    combined.push(combinedObject);
}

combined; // [{"5006":"GrooveToyota"},{"5006":"GrooveSubaru"},{"5006":"GrooveFord"}]
  

Ответ №3:

Лично я бы сделал это способом IAbstractDownvoteFactor ( 1), но для другого варианта я представляю следующее для вашего удовольствия от кодирования:

 var a = [{"branchids":"5006"},{"branchids":"5007"},{"branchids":"5009"}];
var b = [{"branchnames":"GrooveToyota"},{"branchnames":"GrooveSubaru"},{"branchnames":"GrooveFord"}];
var zipped = a.map(function(o,i){ var n={};n[o.branchids]=b[i].branchnames;return n;});
  

Ответ №4:

аналогично решению @robert, но с использованием Array.prototype.map

идентификаторы переменных = [{«branchids»:»5006″},{«branchids»:»5007″},{«branchids»:»5009″}], имена = [{«branchnames»: «GrooveToyota»},{«branchnames»: «GrooveSubaru»},{«branchnames»:»GrooveFord»}], merged = ids.map(функция (o, i) { var obj = {}; obj[o.branchids]=имена[i].branchnames; возвращает obj; });

объединенный; //[{5006: «GrooveToyota»}, {5006: «GrooveSubaru»}, {5006: «GrooveFord»}]

Приветствия!