11.04.2014, 23:36
|
|
Аспирант
|
|
Регистрация: 13.08.2012
Сообщений: 38
|
|
заполнение двумерного массива
всем здравствуйте!
подскажите, как правильно описать двумерный массив одну строку с начальным индексом не нулевым
как в PHP
$mass = array(1=>array(1,2), 2=>array(3,6), 3=>array(7,10));
т.е. получается что в таком массиве индекс первого элемента будет единица
как сделать такое же в JS?
P.S. пробовал написать вот так
$mass = [1=>[1,2], 2=>[3,6], 3=>[7,10]];
ошибка
$mass = [1=[1,2], 2=[3,6], 3=[7,10]];
ошибка
$mass = [1:[1,2], 2:[3,6], 3:[7,10]];
ошибка
Последний раз редактировалось woojin, 11.04.2014 в 23:41.
|
|
12.04.2014, 04:10
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Как вариант можно пропустить первые элементы при объявлении:
var arr = [,[1,2],[3,6],[7,10]]
Правда свойство length массива всё равно считается по последнему индексу. Его конечно можно переопределить, но как-то это неправильно.
А точно массив нужен? Может лучше использовать обычный объект с числовыми свойствами?
Впрочем ничто не мешает написать функцию, которая будет генерировать массив так как надо.
Последний раз редактировалось jsnb, 12.04.2014 в 04:19.
|
|
12.04.2014, 04:10
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,577
|
|
Может потратить всё-таки полчасика и почитать про элементарнейший базовый синтаксис языка, вместо того чтобы гадать на кофейной гуще?
__________________
29375, 35
|
|
12.04.2014, 08:25
|
|
Аспирант
|
|
Регистрация: 13.08.2012
Сообщений: 38
|
|
Сообщение от jsnb
|
var arr = [,[1,2],[3,6],[7,10]]
|
а при таком варианте первый элемент хоть и пустым будет, но всё же будет нулевым?
Сообщение от jsnb
|
А точно массив нужен?
|
да нужен массив
он будет формироваться в PHP? а затем "распечатываться" в HTML
Сообщение от Aetae
|
Может потратить всё-таки полчасика и почитать про элементарнейший базовый синтаксис языка, вместо того чтобы гадать на кофейной гуще?
|
да не вопрос, но наверное у меня глаза на жоп* затылке, но я не нашёл что либо путного
|
|
12.04.2014, 08:38
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от woojin
|
а при таком варианте первый элемент хоть и пустым будет, но всё же будет нулевым?
|
В forEach он участовать не будет, при прямом обращении по индексу 0 выдаст undefined, как и при обращении к любому несуществующему элементу массива. В свойство length записывается максимальный индекс, поэтому да, тут он будет учитываться.
Сообщение от woojin
|
он будет формироваться в PHP? а затем "распечатываться" в HTML
|
А почему нельзя подправить индексы при формировании? И в чем смысл именно такой нумерации? Если идет цикл по конкретным индексам, то какая разница что лежит в остальных частях массива? И вообще что с этим массив на клиенте будет то происходить? Нафиг оно надо?
В общем прямого аналога такого создания массива, как в PHP в JS нет.
Последний раз редактировалось jsnb, 12.04.2014 в 08:44.
|
|
12.04.2014, 11:40
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
$mass = array(1=>array(1,2), 2=>array(3,6), 3=>array(7,10));
var array = [];
array[1] = [1, 2];
array[2] = [3, 6];
array[3] = [7, 10];
var filtered = array.filter(function (value) {
return value;
});
array.length; // 4
filtered.length; // 3
Правда непонятно зачем вам нужен этот геморой.
Сообщение от jsnb
|
В общем прямого аналога такого создания массива, как в PHP в JS нет.
|
var map = {
1: [1, 2],
2: [3, 6],
3: [7, 10]
};
Object.keys(map).length; // 3
Последний раз редактировалось monolithed, 12.04.2014 в 11:44.
|
|
12.04.2014, 12:08
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Сообщение от woojin
|
при таком варианте первый элемент хоть и пустым будет, но всё же будет нулевым?
|
Нет. Свойства с именем "0" у массива не будет:
alert( 0 in [, 1, 2] );
Но если обратиться к этому свойству, вернет undefined. Потому что несуществующее свойство возвращает undefined:
alert( []['Да пох ваще, хоть к чему обращайся'] );
|
|
12.04.2014, 12:18
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от monolithed
|
var map = {
1: [1, 2],
2: [3, 6],
3: [7, 10]
};
Object.keys(map).length; // 3
|
Так он говорит, что ему объект не подходит. Интересно почему...
|
|
12.04.2014, 12:20
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Sweet
|
Потому что несуществующее свойство возвращает undefined
|
А PHP вернет пустую строку
Сообщение от jsnb
|
Так он говорит, что ему объект не подходит. Интересно почему...
|
Наверно потому что он мыслит иначе
Хотя прогресс у них наблюдается.
$object = (object) 'foo';
echo $object->scalar; // 'foo'
print_r($object); // stdClass Object ( [scalar] => foo )
$object = (object) ['1' => 'foo', '2' => 'bar'];
print_r($object); // stdClass Object ( [1] => foo, [2] => bar )
Последний раз редактировалось monolithed, 12.04.2014 в 12:31.
|
|
12.04.2014, 22:04
|
|
Аспирант
|
|
Регистрация: 13.08.2012
Сообщений: 38
|
|
Сообщение от jsnb
|
И вообще что с этим массив на клиенте будет то происходить? Нафиг оно надо?
|
есть функция которая должна или выдавать индекс массива проверяя лежит ли переменная между значениями внутреннего подмассива; или по индексу проверять и выдавать значение ближайшее к верхней или нижней границе подмассива
jQuery(function($) {
var price_quantity = [, [1, 2], [3, 6], [7, 10]];
function check_quantity(variable) {
var pq = price_quantity;
if (variable.hasClass("jsPriceIndex")) {
var val = parseInt(variable.val());
var qua = parseInt(jQuery('.jsQuantity').val(), 10);
var qp = pq[val];
if (qua < qp[0]) {
qua = qp[0];
} else if (qua > qp[1]) {
qua = qp[1];
} else {}
jQuery('.jsQuantity').val(qua);
} else
if (variable.hasClass("jsQuantity")) {
var qua = parseInt(variable.val());
var val = 0;
for (var i = 1; i <= pq.length-1; i++) {
var qp = pq[i];
if (qua >= qp[0] && qua <= qp[1]) {
val = i;
}
}
jQuery(".jsPriceIndex[value='" + val + "']").prop('checked', true);
}
}
});
Сообщение от monolithed
|
Правда непонятно зачем вам нужен этот геморой.
|
мне удобнее вписать в HTML одну строку, по этому и хотел сделать одной строкой!
Сообщение от Sweet
|
Нет. Свойства с именем "0" у массива не будет:
alert( 0 in [, 1, 2] );
|
отлично!!!
Сообщение от jsnb
|
Так он говорит, что ему объект не подходит. Интересно почему...
|
я выше привёл функцию которая будет работать с данным массивом
|
|
|
|