dpablo_escobarr
@dpablo_escobarr

Странное поведение в цикле JavaScript. В результате выводится только один результат итерации. Как решить?

Очень странно себя ведет цикл .

let symb = []
let find = [
			['К'],
			['А', 'Р', 'Р', 'М', 'Р', 'Ф'],
			['М', 'Д']
			]

let arr = [], res_arr = []
	
	function sorts(p_arr, p_symb){

		for(let i = 0; p_arr.length > i; i++){

			index = p_symb.indexOf(p_arr[i])
			now_index = res_arr.indexOf(p_arr[i])


				res_arr[i] = p_symb[index]
				delete p_symb[index]

		}

		return res_arr

	}

	find.forEach((elem, i, mass)=>{

		symb = [
			'Р',
			'А',
			'М',
			'Ф',
			'Р',
			'Ф',
			'Р'
			]

		arr[i] = sorts(mass[i], symb)
	})

	console.log(arr)


Ожидаю такой вывод:

[
[undefined],
['А', 'Р', 'Р', 'М', 'Р', 'Ф'],
['М', undefined]
]

Вместо этого получается:

[
[ 'М', undefined, 'Р', 'М', 'Р', 'Ф' ],
[ 'М', undefined, 'Р', 'М', 'Р', 'Ф' ],
[ 'М', undefined, 'Р', 'М', 'Р', 'Ф' ]
]

Но!!!Если вместо автоинкримента который предоставляет цикл вписать вручную допустим arr[1] = sorts(mass[1], symb)
то данный случай отрабатывает.
Спасибо за ответы
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
@LJ322
У вас res_arr не обнуляется после каждого раза. Каждый вызов sorts в цикле forEach работает с предыдущим res_arr и старые значения не удаляются. Объявите массив res_arr внутри цикла:
function sorts(p_arr, p_symb){
    let res_arr = [];
    //...
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы