Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Склеить несколько массивов в цикле (https://javascript.ru/forum/events/69822-skleit-neskolko-massivov-v-cikle.html)

smart-create 20.07.2017 12:20

Склеить несколько массивов в цикле
 
Добрый день, есть скрипт:

for (var i = 0; i < other_arr.length; i++) {
	var $other_name = other_arr[i].split('|')[0],
		$other_min = other_arr[i].split('|')[1],
		$other_max = other_arr[i].split('|')[2],
		$product_arr = new Array();

	$('.product').each(function(){
		$product_arr.push( $(this).find('[data-filter_name="'+$other_name+'"]').data('filter_name') + '|' + $(this).find('[data-filter_name="'+$other_name+'"]').data('filter_val').split(' ')[0].replace(',', '.') );
	})
}


Он должен собирает технически характеристики товара в один массив, но по факту массив получается не один, а по одному для каждого технического параметра. Например (результат выполнения console.log($product_arr)):

(4) ["Гарантия|2", "Гарантия|1", "Гарантия|3", "Гарантия|1"]

(4) ["Мощность|10", "Мощность|5", "Мощность|23", "Мощность|10"]

А мне нужно что бы было, вот так:

(8) ["Гарантия|2", "Гарантия|1", "Гарантия|3", "Гарантия|1", "Мощность|10", "Мощность|5", "Мощность|23", "Мощность|10"]

Подскажите пожалуйста как это сделать

рони 20.07.2017 12:51

smart-create,
concat

smart-create 20.07.2017 13:08

рони, читал, знаю, использую в работе, НО или я не понимаю как правильно его использовать, или это все таки не то что нужно. Объясню почему - у меня нет 2 определенных массивов, например:

arr_1 = ["Гарантия|2", "Гарантия|1", "Гарантия|3", "Гарантия|1"];
arr_1 = ["Мощность|10", "Мощность|5", "Мощность|23", "Мощность|10"];


В таком случае конечно я могу использовать .concat()

newArr = arr_1.concat(arr_2)


И тогда, да я получу ["Гарантия|2", "Гарантия|1", "Гарантия|3", "Гарантия|1", "Мощность|10", "Мощность|5", "Мощность|23", "Мощность|10"]

НО у меня ведь нет arr_1 и arr_2

У меня есть только один массив $product_arr который формируется вот этим скриптом:
for (var i = 0; i < other_arr.length; i++) {
	var $other_name = other_arr[i].split('|')[0],
		$other_min = other_arr[i].split('|')[1],
		$other_max = other_arr[i].split('|')[2],
		$product_arr = new Array();

	$('.product').each(function(){
		$product_arr.push( $(this).find('[data-filter_name="'+$other_name+'"]').data('filter_name') + '|' + $(this).find('[data-filter_name="'+$other_name+'"]').data('filter_val').split(' ')[0].replace(',', '.') );
	})
}

Как я и говорил в результате его выполнения и выводе через console.log(), получается вот это:
(4) ["Гарантия|2", "Гарантия|1", "Гарантия|3", "Гарантия|1"]

(4) ["Мощность|10", "Мощность|5", "Мощность|23", "Мощность|10"]

Как я в этом случае могу использовать .concat()?

newArr = $product_arr.concat($product_arr)


Как вы понимаете с этой затеи нечего не выйдет

P.S. масивов в результате выполнения скрипта может быть и не 2, может быть и 6 и 10 и 15, в зависимости от товара, например:

(4) ["Гарантия|2", "Гарантия|1", "Гарантия|3", "Гарантия|1"]

(4) ["Мощность|10", "Мощность|5", "Мощность|23", "Мощность|10"]

(4) ["Напор|2", "Напор|1", "Напор|3", "Напор|1"]

(4) ["Высота подачи|10", "Высота подачи|5", "Высота подачи|23", "Высота подачи|10"]

(4) ["...", "...", "...", "..."]

(4) ["...", "...", "...", "..."]



P.P.S А нужно что бы было так:

(20) ["Мощность|10", "Мощность|5", "Мощность|23", "Мощность|10", "Напор|2", "Напор|1", "Напор|3", "Напор|1", "Высота подачи|10", "Высота подачи|5", "Высота подачи|23", "Высота подачи|10"], "...", "...", "...", "...", "...", "...", "...", "..."]

рони 20.07.2017 13:23

smart-create,
не понимаю

smart-create 20.07.2017 13:35

рони, ок) есть сайт

зайдите пожалуйста на него и откройте консоль

потяните за любой из ползунков слева и нажмите "ДА"



В консоли вы увидите что выводиться 2 массива, они содержат в себе технические параметры всех товаров на странице (см. изображение)

smart-create 20.07.2017 13:37

то что выводится это результат работы скрипта:

for (var i = 0; i < other_arr.length; i++) {
	var $other_name = other_arr[i].split('|')[0],
		$other_min = other_arr[i].split('|')[1],
		$other_max = other_arr[i].split('|')[2],
		$product_arr = new Array();

	$('.product').each(function(){
		$product_arr.push( $(this).find('[data-filter_name="'+$other_name+'"]').data('filter_name') + '|' + $(this).find('[data-filter_name="'+$other_name+'"]').data('filter_val').split(' ')[0].replace(',', '.') );
	})
        console.log($product_arr);
}

рони 20.07.2017 13:38

smart-create,
спасибо за подробности, но мне не осилить

smart-create 20.07.2017 13:38

Мне нужно сделать так что бы массив который содержит в себе "гарантия, гарантия, гарантия" и массив "мощность, мощность, мощность", не были разделены, нужно что бы это был один большой массив

smart-create 20.07.2017 13:40

как я могу объяснит что бы было понятно?

Я понимаю что я напрягаю, но если вы уж тут находитесь, все равно проводите здесь время, а мне очнгь нужна помощь, я бьюсь уже 5 день..., может все таки поможете?

laimas 20.07.2017 13:50

Цитата:

Сообщение от smart-create
нужно что бы это был один большой массив

А каждой гарантии из первого массива соответствует мощность из второго, или каждый сам по себе??


Часовой пояс GMT +3, время: 13:48.