Соединение массива
Добрый день есть 2 массива с разной длинной массива
Допустим в одном массиве length == 600, в другом length == 50. массивы примерно выглядят так: var array = [{name: 'Мешков Андрей Паразитович', data: 'Вредитель'}]; var array2 = [{name: 'Мешков А.П.', teleph: '12345'}]; Нужно создать 3 массив в котором бы совпадали поля name, делаю так: var array = [{name: 'Мешков Андрей Паразитович', data: 'Вредитель'}]; var array2 = [{name: 'Мешков А.П.', teleph: '12345'}]; var array3 = []; var array4 = []; for(i = 0; i < array .length; i++){ array3.push(array [i].name.toString().split(' ')); }; // простите за гавнокод for(i = 0; i < array3.length; i++){ if(array3[i].length >= 3){ array4.push(array3[i][0]+' ' + array3[i][1][0]+'.'+ array3[i][2][0]+'.'); }; }; // в array4 получаем Мешков А.П. //создаем героический array5 (не бейте меня) var array5 = [] for(i = 0; i < array .length; i++){ array5.push(name:array[i] , name2:array4[i], data:data[i]); } Теперь как в array5 еще и засунуть teleph из array2 чтоб у него параметр name совпадал c параметром name2 из array5. А вообще как правильно соеденить 2 массива где совпадают поля. Без вот того что я сверху написал, учитывая что длинна массива не совпадает. Вроде как чтоб была таблица у кого нет номеров телефонов поля пустые у кого есть заполнены в соответсвии с совпадающими именами. |
Цитата:
var a1 = [...], a2 = [...]; var a3 = []; for (var i = 0; i < a1.length; ++i) { var item = { a[i] ... }; // копируем данные из a1 a3.push(item); // забираем данные из a1 for (var j = 0; j < a2.length; ++j) { if (item.xxx === a2[j].xxx) { item.nnn = a2[j].nnn; break; } } } если большие (десятки тыщ в каждом), то по одному из них создают объект-индекс, потом данные получают по индексу. если совсем повезло и оба массива отсортированы по общему полю, можно параллельно обойти оба, линейное время на всё про всё. если только один отсортирован, то поиск делением пополам. |
Alexandroppolus,
Попробовал, в a3 просто переносится значение из a1 и все =( |
Artur_Hopf,
var array = [{name: 'Мешков Андрей Паразитович', data: 'Вредитель'}]; var array2 = [{name: 'Мешков А.П.', teleph: '12345'}]; var array3 = []; for (var i = 0; i < array.length; i++) { var str = array[i].name, name2 = str.replace(/(\s+\S)(\S+)/gi, "$1.").replace(/\.\s+/, "."), el = array2.find(function(element) { return element.name.trim() == name2.trim() }); if (el) { el = Object.assign({name2: el.name}, el, array[i]); array3.push(el) } }; console.log(array3) |
рони,
Спасибо, я тебе как нибудь денег наверное даже вышлю:p Но пока их нет, низкий тебе поклон =) |
Часовой пояс GMT +3, время: 06:36. |