#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;
}
Комментарии:
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»}]
Приветствия!