Соединение массива
Добрый день есть 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, время: 09:49. |