Проблема с функцией
Привет всем.
Хочу сделать задачку такую. когда в массиве есть пропуски, их опустить, и чтобы выводилось только строки и числа. (Другими словами, из следующего фрагмента кода, надо, чтобы после вызова функции, массив testarray поменялся, и выглядил всегда так: testarray = [44,33, 'DAaaa'] Создал функцию, и вот не догоняю немного. var testarray = [,,,44,33,,'DAaaa']; function parse(array) { for(var i = 0; i < array.length; i++) { if(!array[i]) continue; else document.write(array[i] + "<br>"); } return array; } parse(testarray); Вся моя ошибка состоит в том что "else document.write(array[i] + "<br>");", но как иначе? пытался и return (array[i] + "<br>"), не выходит. Я хочу чтобы после вызова функции, массив поменялся, и всегда выдавалось без пропусков. Надеюсь не сильно запутанно написал. Что-то я конкретно туплю :( |
|
idriverx,
:write: var testarray = [, , , 44, 33, , 'DAaaa']; function parse(array) { return array.filter(function (number) { return number !== undefined }) } testarray = parse(testarray) alert(testarray) |
рони, более "стильно-молодёжно" было бы так:
.filter(function (item, index, array) { return index in array; }) Но это лишнее, потому что Цитата:
.filter(function (item) { return typeof item == "string" || typeof item == "number"; // ну и можно на instanceof при желании) }) |
рони,
BallsShaped спасибо! |
Можно ещё сдвинуть нужные элементы в начало массива и обрезать его
function deleteEmpty(arr) { var n = arr.length, k = 0; for (var i = 0; i < n; i++) { if (arr[i] !== undefined) arr[k++] = arr[i]; } arr.length = k; return arr; } alert( deleteEmpty([,,,44,33,,'DAaaa']) ); P.S. Надо потестировать, что быстрей удаляет. Обычно filter медленнее. |
Цитата:
|
Спасибо всем за помощь!
Сегодня сделал что-то типо такого, удивительно, но работает :) var array = [,,,3,4,7,,,,'DDaa','dd']; var emptyarray = []; function parse(from,to) { for(var i = 0; i < from.length; i++) { if(!from[i]) continue; else to.push(from[i]); } return to; } parse(array, emptyarray); array = emptyarray; document.write(emptyarray + " " + array); // и там, и там без пропусков |
idriverx,
а если число нуль или строка но пустая ? ))) |
рони,
а я еще проверку для нуля сделаю ) if(from[i] == 0) to.push(from[i]); |
Часовой пояс GMT +3, время: 04:10. |