Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа с массивом (https://javascript.ru/forum/misc/25392-rabota-s-massivom.html)

strengerst 04.02.2012 00:10

Работа с массивом
 
Это элементарно все навернека знают но просьба мне объяснить.
Массив обладает свойством length - который определяет длину массива, а вот как определить количество элементов в массиве. Ну к примеру:

var massive= new Array();
massive[1]="слово1";
massive[3]="слово2";
massive[5]="слово3";
var f=massive.length;

Так вот переменая f , будет равна значению 6; А как можно получить
количество элементов. В масиве их 3.:-?

devote 04.02.2012 00:14

var massive= new Array();
massive[1]="слово1";
massive[3]="слово2";
massive[5]="слово3";

for(var k in massive ) {
    if ( ~~k == k ) {
        alert( massive[ k ] );
    }
}

strengerst 04.02.2012 00:21

а вот разьеснить можешь, что делает
к
, перезаписываеться в массив за место всех ключей и к стати ~~ для чего они.:-?

strengerst 04.02.2012 00:35

да и еще код мне просто выводит пошагово мои значения через ключ, а мне нужно получить переменную которая будет содержать сумму всех элементов массива. В данном коде к примеру
$l=3;

strengerst 04.02.2012 00:35

да и еще код мне просто выводит пошагово мои значения через ключ, а мне нужно получить переменную которая будет содержать сумму всех элементов массива. В данном коде к примеру $l=3

devote 04.02.2012 00:44

Ну а что вы хотели, вы создаете массив из шести элементов.. и при этом хотите получить только реальные, тоесть назначенные... И конечно же получить/подсчитать их можно только перебором.
var massive= new Array();
massive[1]="слово1";
massive[3]="слово2";
massive[5]="слово3";

var length = 0;
for(var k in massive ) {
    ~~k == k && ++length;
}
alert(length);

strengerst 04.02.2012 01:20

О спасибо начинаю понимать, простите за наглость а не найдете свободную минутку ражевать мне ваш цикл, в учебник написано:
Итерация по свойствам объекта. А вот я не совсем понял как работает ваш цикл, и для чего нужны ~~ , &&- Логическое "И"- Возвращает последний операнд, если все операнды верны. Если хоть один из операндов неверен, то возвратит первый неверный операнд.
Дальше немножко понятно тоже:
length
это обычная переменая которая перед циклом равнялось 0, а в цикле она каждый раз пребовляет по единицы сколько циклов столько и прибовлений блогадоря: + +так как это тоже самое что +1; А вот принцип работы
~~k == k
не могу понять.

devote 04.02.2012 01:28

~ это битовая операция
alert( ~1 ); // меняет биты 0 на 1, а единицы на ноль

тоесть если смотреть в двоичной системе:
00000001 - в десятичной рано 1
после манипуляции через знак ~ будет:
11111110 - тоесть 254 или -1

в нашем случае строку переводим в число:
~~"1" == 1

strengerst 04.02.2012 01:48

ага понятно, не знал что так можно, а если воспользоваться методом
parseInt
ну вроде как:
var length = 0;
for(var k in massive ) {
    parseInt(k) == k && ++length;
}
alert(length);
Или не правильно.

Раед 04.02.2012 01:50

devote,
Цитата:

Сообщение от devote
~~k == k

, а как может быть иначе?


Часовой пояс GMT +3, время: 05:13.