Удалить из массива пустые элементы
Нужно удалить из массива пустые элементы.Поискал в интернете -несколько вариантов нашёл.А ,вообще,есть какой-нибудь "стандартный способ"?
|
например, можно так:
<html> <head> <title>example</title> </head> <body> <script> Array.prototype.clear = function () { this.forEach(function (el, b, c) { if (el == undefined || el == null) c.splice(b, 1); }); } var myArray = [undefined, 4, 6, 7, -1, null]; myArray.clear(); console.log(myArray); </script> </body> </html> можно извратиться так: ))) <html> <head> <title>example</title> </head> <body> <script> Array.prototype.clear = function () { this.forEach(function (el, b, c) { if (el == undefined || el == null) c.splice(b, 1); }); return this; } Array.prototype.alert = function () { alert(this.join('; ')); } var myArray = [undefined, 4, 6, 7, -1, null]; myArray.clear().alert(); </script> </body> </html> |
skrudjmakdak,спасибо!
А,где изучают ЯВАСКРИПТ?В университете или в колледже изучают? |
вот смотри еще прикол. (у меня хром) заходишь в фаербаг, в консоль.. и там пишешь
"Array.prototype", потом ставишь точку и у тебя высветится список свойств и методов этого класса вот я тебе заскринил: ![]() конечно он не дает описание, но если ты знаешь английский, то примерно понять можно.. а еще лучше загуглись.. посм описание этого свойства или метода.. или прям в консоле можешь прописать: var t = [1, 2, 3]; t.join(';'); и у тебя выпадит в консоль результат также можешь прописать "String.prototype." и у тебя вывалит список свойств и методов класса строки. вообщем консоль это супер! или например вот: document.querySelector('body'); найдет тебе боди. вообщем можешь пользоваться на полную катушку.. я самостоятельно изучал. с третьего курса начал потихоньку.. |
Спасибо:)
А я ещё думал зачем эта "хрень".Понятно,теперь!!!Отк да всё берётся! Как вы помогаете!!!:thanks: С консолью в хроме!Теперь с этим!Разберусь!Спасибо,огр мное! И никто,кроме,вас не подсказал!!! |
Цитата:
|
рони,а почему ты мне перестал помогать?Я,совсем не понимаю ничего?
Ты очень здорово мне помог! Нет у меня никаких навыков программирования-поэтому всё так тяжело даётся. |
Цитата:
я думаю те не так уж и много лет, имхо)) поэтому все еще впереди)) |
Да,я только ЗА!!!За ТРЕНИРОВКИ!
рони-помогал, начал что-то понимать.Потом,опять-провал. Нет такого на учебных сайтах,например: b[i]=b[i].split(" "); Проблема не в split(" "),а в b[i]=b[i]......,что так можно сделать:( |
а что находится в b[i]?
|
Да,это неважно,что там!Смысл в том,что нигде не написано,что так можно сделать!!!По многомерным массивам нет информации,нет примеров.
|
эээ?? многомерным массивам?? открою тебе секрет, что в js нет многомерных массивов. можно сделать массив с массивами. т.е. указатель на массив
|
Это не секрет.Я знаю,что в яваскрипт нет многомерных массивов.Что в яваскрипте -это называется "массив с массивами".
Разница в чём,опять не понятно? Большая просьба,только не обижаться!!!:) |
Просто,на сайтах с математическим уклоном их называют многомерными,а с программированным-массивы в массивах(много раз встречал).
|
Сложно так объяснять.
вот например есть обычный массив var t = [1, 2, 3]; console.log(t[1]); будет 2. а если создать еще один массив: var r = [6, 7, 8]; а потом запхать его в первый: t[1] = r; то у тебя получится что в t[1] храниться указатель на массив r console.log(t[1]); |
Это,если так.А если:var a=[[1,2],[3,4],[5,6]];
Так нельзя его назвать многомерным?(я уточняю...) Как бы на сленге,что ли.. |
можно. но понимать нужно, что на деле у тебя 4 массива
первый это [1,2] второй это [3,4] третий это [5,6] и четвертый это как раз массив указателей, в котором хранятся ссылки. в первом элементе хранится ссылка на первый массив, во втором элемент ссылка на второй и т.д. a[0] - ссылка на массив [1,2]; console.log(a[0]); |
Цитата:
|
В консоле получается:
a[0] [1, 2] a[1] [3, 4] a[2] [5, 6] a[3] undefined a[4] undefined А четвёртый где,массив указателей?Как его найти? |
Цитата:
|
Цитата:
|
а что у тебя должно вывалить когда ты обращаешься к a[3] или a[4]?? какой результат ты хотел получить?
|
массив указателей это и есть а=[]?
|
a[3] или a[4]-думал увидеть undefined.Мучает вопрос-почему "четвёртый"?
|
Цитата:
var a1 = [1, 2]; //это 1ый ОДНОМЕРНЫЙ массив var a2 = [3, 4]; //это 2ой ОДНОМЕРНЫЙ массив var a3 = [5, 6]; //это 3ий ОДНОМЕРНЫЙ массив var a4 = [a1, a2, a3]; //это 4ый ОДНОМЕРНЫЙ массив. содержит ссылки на 1, 2 и 3 ОДНОМЕРНЫЙ массив вот это все, равносильно тому что ты писал: var a4 = [[1,2], [3,4], [5,6]]; //т.е. это "сложный" массив а выше я тебе его же разбил на "простые" массивы |
Цитата:
Массивы массивов более гибкие, т.к. не накладывают ограничений на длину вложенных массивов: [ [1, 2] // вложенный массив с 2-мя элементами, [1] // вложенный массив с 1-м элементом ] При реализации многомерного массива мы сразу декларируем, что размер вложенных масcивов должен быть равен n, где n некоторое целое число, т.е. получается меньше гибкости, но зато работает быстрее. |
Ага,я так и понимал.Просто,смутило-"четвёртый".Ладно,здесь понятно.Я,думал,что не так уже.
kobezzza,понял!Длина массива, вот в чём дело! p.s.:у меня в школе не было программирования!Изучал яваскрипт самостоятельно по Дунаеву.Первый язык программирования.Бейсик и С++ не изучал.Поэтому ,наверное,и не понимаю простые вещи. |
Цитата:
Цитата:
dima***, Поскольку ты новичок, я думаю, тут не помешает разжевать и дополнить ответ kobezzza для ясности. Понятие массива в программировании не всегда задано однозначно. В общем случае так называется объект, объединяющий некоторое множество других, доступных каждый напрямую по своему индексу. При этом организация внутренней механики, ограничения на тип хранимых внутри объектов и дополнительный функционал опускаются для упрощения - обычно все тонкости понятны из контекста. В JS массивом изначально считается встроенный тип объектов, который допускает произвольную манипуляцию набором данных: они могут быть любого типа, их можно добавлять и удалять как угодно, а сам размер ограничен только самим движком JS. В других языках, приложениях и всевозможных абстрактных и предметно-ориентированных моделях точное определение может быть другим. Например, в C/C++ массив это ничто иное, как цельный блок памяти, который интерпретируется как неразрывная последовательность элементов одного и того же типа и размера. Там мы не можем просто так взять и вырезать какой-то элемент, чтобы дырка между соседями свернулась сама собой: для этого пришлось быть передвинуть весь хвост справа на позицию назад, а это могут быть мега- и гигабайты памяти! Такие простые структуры непосредственно используются, как правило, только для данных фиксированной длины с жесткой привязкой к индексу. Так вот, когда говорят о многомерных массивах, часто подразумеваются именно такие. Дело в том, что одномерный массив как линейный блок памяти легко превращается в многомерный, если применить к функции индекса простые арифметические преобразования. Это имеет смысл, так как доступ к данным происходит максимально быстро, а поддержание объекта в действии не накладывает никаких неявных издержек в виде сложных вычислений или дополнительной памяти. Например, нужен массив [5][6][7]. Объем его одномерного аналога будет 5*6*7 = 210 элементов. Можно однозначно сопоставить вариации трех координат одному диапазону чисел. Если наша иерархия индексов [x][y][z], то преобразование к одномерному виду будет i = (x*6 + y)*7 + z. И хотя в JS обычные массивы позволяют работать с ними КАК с многомерными, внутренняя их топология все же остается свободной для изменений. В связи с этим иногда возникает путаница в толковании. Тем не менее, уже несколько лет как в оборот введены Typed Arrays, являющиеся примером простого, но жесткого варианта. Однако типы их содержимого на данный момент ограничены только числовыми. |
Цитата:
|
Цитата:
var i=[]; for (var x=0; x<5; x++) for (var y=0; y<6; y++) for (var z=0; z<7; z++) i.push((x*6 + y)*7 + z); console.log(i.join(', ')); |
Дзен-трансгуманист,
маленький универсальный преобразователь к одномерному виду :write: :dance: function x(c) { for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++; return a }; alert([x([4]),x([4,5]),x([4,5,6]),x([4,5,6,7])]) |
рони,
Чёто не то наворочено. :) |
А разномерный массив-это правильно?
|
Цитата:
function m(c) { for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++; return a }; var i=[]; for (var x=0; x<5; x++) for (var y=0; y<6; y++) for (var z=0; z<7; z++) i.push(m([x,y,z])); console.log(i.join(', ')); |
вот это действительно наркомания :)
|
массив с массивами...указательный массив.
В яваскрипте нет названия для такого массива? Ссылочный массив пусть будет или тоже неправильно? А то какая-то "непонятина" получается. |
Цитата:
Цитата:
Во-вторых, счет идет с нуля, последний индекс = размер-1. Я там продемонстрировал, что приведенная в пример формула дает корректный порядок индексов. Естественно, последнее число было на единицу меньше общего размера. И наконец, я бы даже не догадался, что эта функция должна вычислять размер, если бы начал читать тему с этой страницы. :) Что там за d = 5? |
Цитата:
Цитата:
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> </head> <body> <script> function m(c) { for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++; return a }; for (var x=0; x<5; x++) for (var y=0; y<6; y++) document.write('['+ x +','+ y +'] : '+m([x,y])+'<br>'); </script> </body> </html> |
Цитата:
Обфускация концептуально необходима? :D |
// Multidimensional to single dimension representation var m2sdim = ( function () { var argNames = 'abcdefghijklmnopqrstuvwxyz'.split(''); return function ( /* arguments */ ) { var dimension = arguments.length; var fnSource = argNames[0]; var size = +arguments[0]; for ( var i = 1; i < dimension; i++ ) { fnSource = '(' + fnSource + '*' + +arguments[i] + '+ +' + argNames[i] + ')'; size *= +arguments[i]; } var fn = Function.apply( null, argNames.slice( 0, dimension ).concat( 'return ' + fnSource )); fn.size = size; return fn; }; })(); var test = m2sdim(5,6,7,8); console.log([ test.toString(), test(0,0,0,1), test(0,0,1,0), test(0,1,0,0), test(1,0,0,0), test.size // размер массива ].join('\n')); Как можно догадаться, тут максимум на 26 измерений. Но для примера, думаю, достаточно. :) |
Часовой пояс GMT +3, время: 19:30. |