Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Удалить дыр из массива JS / 25 сообщений из 42, страница 1 из 2
10.06.2007, 17:37
    #34587327
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Есть массив:
var markersArray=[];

Элементы из этого массива удаляются так:
markersArray [n] = null;

В итоге массив может содержать элементы разные null, но это недопустимо.
Как избавиться от элементов равных null, так, что бы номера элементов массива шли по порядку?

Т.е. например:
Вот такой массив:
markersArray[0] = ‘val0’;
markersArray[1] = ‘val1’;
markersArray[2] = ‘val2’;
markersArray[3] = null;
markersArray[4] = ‘val4’;

Стал вот таким:
markersArray[0] = ‘val0’;
markersArray[1] = ‘val1’;
markersArray[2] = ‘val2’;
markersArray[3] = ‘val4’;
...
Рейтинг: 0 / 0
10.06.2007, 17:43
    #34587333
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
В JavaScript любой массив является хэшем.
Есть еще конструкция
Код: plaintext
delete markersArray [n];
...
Рейтинг: 0 / 0
10.06.2007, 17:57
    #34587342
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Хрюхрюшкин.В JavaScript любой массив является хэшем.

Пожалуста объясните поподробнее, как это можно использовать для решения моей задачи
Хрюхрюшкин.
Есть еще конструкция
Код: plaintext
delete markersArray [n];

[/quot]
delete не уменьшает длинны массива.
...
Рейтинг: 0 / 0
10.06.2007, 18:29
    #34587360
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Вот так сделал:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function regulateArrayCleaning(array){
	var cleanArray = [];
	var j =  0 ;
	for (var i= 0 ; i<(array.length); i++) {
		if(array[i] == null){
			cleanArray[j] = array[i];
			j++;
		}
	}
	return cleanArray;
}
...
Рейтинг: 0 / 0
10.06.2007, 18:35
    #34587364
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
И не работает :(
...
Рейтинг: 0 / 0
10.06.2007, 18:54
    #34587378
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Alex_BBB
Пожалуста объясните поподробнее, как это можно использовать для решения моей задачи
//
delete не уменьшает длинны массива.
Я не знаю в чем заключается твоя задача. Сейчас ты хочешь, чтобы тебе закодировали придуманное тобой решение. Я же хотел натолкнуть тебя на использование другого решения.
...
Рейтинг: 0 / 0
10.06.2007, 18:58
    #34587384
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Задачу я, как мне кажется, вполне конкретно описал


Вот так работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function regulateArrayCleaning(array){
	var cleanArray = [];
	var j =  0 ;
	for (var i= 0 ; i<(array.length); i++) {
		if(array[i] != null){
			cleanArray[j] = array[i];
			j++;
		}
	}
	return cleanArray;
}
...
Рейтинг: 0 / 0
10.06.2007, 19:22
    #34587398
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Alex_BBBЗадачу я, как мне кажется, вполне конкретно описал


Вот так работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function regulateArrayCleaning(array){
	var cleanArray = [];
	var j =  0 ;
	for (var i= 0 ; i<(array.length); i++) {
		if(array[i] != null){
			cleanArray[j] = array[i];
			j++;
		}
	}
	return cleanArray;
}

Это самый обычный bullshit. Продукт индусов и обезьянок. Не научишься писать эффективные приложения — придется идти в манагеры
...
Рейтинг: 0 / 0
10.06.2007, 19:28
    #34587400
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Сделай лучше
...
Рейтинг: 0 / 0
10.06.2007, 19:29
    #34587401
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
И покажи решение здесь
...
Рейтинг: 0 / 0
10.06.2007, 19:42
    #34587409
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Alex_BBBСделай лучше
Это задание на лабораторную что-ли? :)
А то я так и не увидел задачу, которую нужно решить данным способом.
...
Рейтинг: 0 / 0
10.06.2007, 20:26
    #34587435
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Хрюхрюшкин. Alex_BBBСделай лучше
Это задание на лабораторную что-ли? :)
А то я так и не увидел задачу, которую нужно решить данным способом.
Если ты не видишь - это не значит что её нет.

Я могу тебе объяснить:

Есть массив объектов, который динамически заполняется элементами.
Элементы так же могут удаляться из этого массива.

В итоге, после заранее неизвестного числа операций по добавлению и удалению элементов, этот массив передается на сервер.

К передаваемому на сервер массиву существуют требования:
1.Все индексы элементов должны идти по порядку
2.Не должно быть пустых элементов массива.

Таким образом:
1 При удалении элемента массива нельзя использовать выражение:
Код: plaintext
delete myarray[n];
Так как в этом случаи длинна массива остается неизменной, а при обращении по ссылке
Код: plaintext
myarray[n]
,(после применнеия delete myarray[n];)
,результат будет undefined

2 Так же при удалении нельзя применить и
Код: plaintext
myarray.spice(n, 1 )
Так как в этом случаи перепутаются все индексы элементов массива.


Таким образом было решено сделать следующее:
При удалении элементов использовать
Код: plaintext
myarray [n]=null

А при добавлении элементов
Код: plaintext
1.
2.
3.
4.
for (var i= 0 ; i<( myarray.length); i++) {
	   	if(!myarray [i]){break;}
}
myarray [i]=marker;
myarray.numberInArray = i++;
(последние выражение выглядит несколько громоздко, но что бы объяснить тебе это могут уйти годы)

Однако этого оказалось мало, т.к. возможна ситуация при которой один из элементов массива будет удален, но добавление элемента может не последовать.
Т.е. получится, что для этого элемента значение будет null.

И вот по этому приходится перед отправкой массива единожды использовать функцию
Код: plaintext
myarray =regulateArrayCleaning(myarray);


А теперь, если ты смог меня понять, предложи свой вариант решения этой задачи. Иначе, ты просто крикливое фуфло.
...
Рейтинг: 0 / 0
10.06.2007, 20:37
    #34587442
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Во всех твоих рассуждениях есть один интересный момент.
Кто это придумал? И зачем?
Alex_BBB
К передаваемому на сервер массиву существуют требования:
1.Все индексы элементов должны идти по порядку
2.Не должно быть пустых элементов массива.
...
Рейтинг: 0 / 0
10.06.2007, 20:38
    #34587443
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
И еще момент. Каким образом ты отправляешь на сервер массив JavaScript?
...
Рейтинг: 0 / 0
10.06.2007, 20:52
    #34587453
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Alex_BBB
И вот по этому приходится перед отправкой массива единожды использовать функцию
Код: plaintext
myarray =regulateArrayCleaning(myarray);

Если ты всё-равно перед отправкой используешь эту функцию, то зачем писать всё это?
Код: plaintext
1.
2.
3.
4.
5.
for (var i= 0 ; i<( myarray.length); i++) {
	   	if(!myarray [i]){break;}
}
myarray [i]=marker;
myarray.numberInArray = i++;

Я бы сделал проще:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
<html>
<head>
</head>
<body>
<script type="text/javascript">
var arr = [];

arr[arr.length++] = '1';
arr[arr.length++] = '2';
arr[arr.length++] = '3';
arr[arr.length++] = '4';
arr[arr.length++] = '5';

delete arr[ 3 ];

arr[arr.length++] = '6';


function printArray(myArray) {
 for (var item in myArray) {
  document.write('myArray[' + item + '] = ' + myArray[item] + '; ');
 }
}

function arrayClean(myArray) {
 var newArray = [];
 var idx =  0 ;
 for (var item in myArray) {
  newArray[idx++] = myArray[item];
 }
 return newArray;
}
document.write('ORIGINAL<br>');
printArray(arr);
document.write('<br>REARRANGED<br>');
printArray(arrayClean(arr));
</script>
</body>
</html>


А еще проще - вообще не чистить. Это проблемы сервера - валидировать входные данные.

Кто там фуфло? :)
...
Рейтинг: 0 / 0
10.06.2007, 21:00
    #34587463
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Хрюхрюшкин.Во всех твоих рассуждениях есть один интересный момент.
Кто это придумал? И зачем?
Alex_BBB
К передаваемому на сервер массиву существуют требования:
1.Все индексы элементов должны идти по порядку
2.Не должно быть пустых элементов массива.

Задача такая какая она есть.
Если я опять разжую тебе зачем это надо, ты опять что-нибудь спросишь, и так будет до бесконечности.
Просто прими эти условия.

Если ты не можешь себе представить область применения чего-либо это не значит что её нет. Я, например, не знаю дороги в Африку, однако это не означает, что её нет.

Ты прав только в одном, вопрос слишком простой, что бы публиковать его на форуме.
Хотя я не буду (как это делаешь ты) отрицать что возможно есть лучшее решение, и возможно кто-нибудь его озвучит.

Так, будет твой вариант или нет?
...
Рейтинг: 0 / 0
10.06.2007, 21:02
    #34587469
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Alex_BBBТак, будет твой вариант или нет?
Я уже всё написал.
...
Рейтинг: 0 / 0
10.06.2007, 21:09
    #34587474
vasa_c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
авторЯ, например, не знаю дороги в Африку, однако это не означает, что её нет.
Да, она есть. Вернее есть бесконечное количество возможных маршрутов. Но только один из них кратчайший. Ты же спрашиваешь здесь: "как мне попасть в Африку, через Австралию?".

Даже если не углубляться в дебри, первое же решение на вскидку (не вспоминая, есть ли стандартные методы): создать пустой массив, перебрать исходный массив в цикле, добавляя ненулевые элементы в новый. Азы программирования. Как ты пытаешься делать что-то сложное, если стопоришься на элементарном?
...
Рейтинг: 0 / 0
10.06.2007, 21:14
    #34587480
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Хрюхрюшкин, не работает

vasa_c
Даже если не углубляться в дебри, первое же решение на вскидку (не вспоминая, есть ли стандартные методы): создать пустой массив, перебрать исходный массив в цикле, добавляя ненулевые элементы в новый.

Чем это отличается от моего решения?
vasa_cАзы программирования. Как ты пытаешься делать что-то сложное, если стопоришься на элементарном?
Я уже сказал, что возможно вопрос слишком простой для публикации на форуме. Однако возмоесть лучшие пути решения.
...
Рейтинг: 0 / 0
10.06.2007, 21:16
    #34587481
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
vasa_c
Даже если не углубляться в дебри, первое же решение на вскидку (не вспоминая, есть ли стандартные методы): создать пустой массив, перебрать исходный массив в цикле, добавляя ненулевые элементы в новый. Азы программирования. Как ты пытаешься делать что-то сложное, если стопоришься на элементарном?
Автор уже это написал. Только решение получилось громоздким, а самое главное — все его дополнительные телодвижения в процессе работы абсолютно бессмысленны, посколько данные всё-равно проходят финальную глажку утюгом.
...
Рейтинг: 0 / 0
10.06.2007, 21:19
    #34587484
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Хрюхрюшкин. vasa_c
Даже если не углубляться в дебри, первое же решение на вскидку (не вспоминая, есть ли стандартные методы): создать пустой массив, перебрать исходный массив в цикле, добавляя ненулевые элементы в новый. Азы программирования. Как ты пытаешься делать что-то сложное, если стопоришься на элементарном?
Автор уже это написал. Только решение получилось громоздким, а самое главное — все его дополнительные телодвижения в процессе работы абсолютно бессмысленны, посколько данные всё-равно проходят финальную глажку утюгом.
Нет не бессмысленны, так как этот массив используется, а не только передается на сервер.
...
Рейтинг: 0 / 0
10.06.2007, 21:19
    #34587485
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Alex_BBBХрюхрюшкин, не работает
Что у тебя не работает? У меня — пример выполняется на IE 6, Firefox 2, Opera 9, IE 5.5.

Гарантированно работать не будет на IE 5.0, к примеру.
Где еще проверить?
...
Рейтинг: 0 / 0
10.06.2007, 21:20
    #34587486
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
vasa_cКак ты пытаешься делать что-то сложное, если стопоришься на элементарном?
Не пытаюсь а делаю, а вот ты покажи свою работу? что ты такого сделал сложного?
...
Рейтинг: 0 / 0
10.06.2007, 21:20
    #34587487
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Alex_BBB
Нет не бессмысленны, так как этот массив используется, а не только передается на сервер.
Ну и работай с ним. В чем проблема? Я показал, как удалять и добавлять элементы. Это делается самым обыкновенным способом.
...
Рейтинг: 0 / 0
10.06.2007, 21:24
    #34587494
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить дыр из массива JS
Хрюхрюшкин.
Ну и работай с ним. В чем проблема? Я показал, как удалять и добавлять элементы. Это делается самым обыкновенным способом.
Ты сначала развел всю эту байду, а потом показал решение которое не является ответом на вопрос.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Удалить дыр из массива JS / 25 сообщений из 42, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]