Вопрос

У меня есть разреженный массив в Jscript, с ненулевыми элементами, встречающимися как с отрицательным, так и с положительным индексами.Когда я пытаюсь использовать цикл for in, он не пересекает массив от самого низкого (отрицательного) индекса до самого высокого положительного индекса.Вместо этого он возвращает массив в том порядке, в котором я добавил элементы.Перечисление тоже не работает.Есть ли какой-нибудь метод, который позволит мне это сделать?

Пример

arrName = new Array();
arrName[-10] = "A";
arrName[20] = "B";
arrName[10] = "C";

При циклическом просмотре это должно дать мне A, затем C и B.

Это было полезно?

Решение

Технически, "A" вообще нет в массиве, поскольку у вас не может быть отрицательного индекса.Это просто член объекта arrName.Если вы проверите arrName.length, вы увидите, что оно равно 21 (0,1,2, ...,20), Почему бы вам вместо этого не использовать обычный объект (в качестве хэш-таблицы).Что-то вроде этого должно сработать:

<script type="text/javascript">
//define and initialize your object/hastable
var obj = {};
obj[20] = 'C';
obj[10] = 'B';
obj[-10] = 'A';

// get the indexes and sort them
var indexes = [];
for(var i in obj){
    indexes.push(i);
}
indexes.sort(function(a,b){
    return a-b;
});

// write the values to the page in index order (increasing)
for(var i=0,l=indexes.length; i<l; i++){
    document.write(obj[indexes[i]] + ' ');
}
// Should print out as "A B C" to the page
</script>

Другие советы

Вы натыкаетесь на границу между Arrayы и Objects в Javascript.Доступ к элементам массива осуществляется по порядковому номеру, целому числу от 0 до 4294967294 (максимальное 32-разрядное целое число без знака - 1) включительно.Доступ к свойствам объекта осуществляется по имени.Поскольку -10 не является допустимым порядковым номером, оно интерпретируется как имя.Вот более простой пример:

var arr = new Array();
arr[0] = 'A';
arr[1] = 'B';
arr[-1] = 'C';
arr.length

Результат равен 2 - в массиве всего два элемента с индексами 0 и 1.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top