Работа с массивом
Это элементарно все навернека знают но просьба мне объяснить.
Массив обладает свойством length - который определяет длину массива, а вот как определить количество элементов в массиве. Ну к примеру: var massive= new Array(); massive[1]="слово1"; massive[3]="слово2"; massive[5]="слово3"; var f=massive.length; Так вот переменая f , будет равна значению 6; А как можно получить количество элементов. В масиве их 3.:-? |
var massive= new Array(); massive[1]="слово1"; massive[3]="слово2"; massive[5]="слово3"; for(var k in massive ) { if ( ~~k == k ) { alert( massive[ k ] ); } } |
а вот разьеснить можешь, что делает
к, перезаписываеться в массив за место всех ключей и к стати ~~ для чего они.:-? |
да и еще код мне просто выводит пошагово мои значения через ключ, а мне нужно получить переменную которая будет содержать сумму всех элементов массива. В данном коде к примеру
$l=3; |
да и еще код мне просто выводит пошагово мои значения через ключ, а мне нужно получить переменную которая будет содержать сумму всех элементов массива. В данном коде к примеру $l=3
|
Ну а что вы хотели, вы создаете массив из шести элементов.. и при этом хотите получить только реальные, тоесть назначенные... И конечно же получить/подсчитать их можно только перебором.
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); |
О спасибо начинаю понимать, простите за наглость а не найдете свободную минутку ражевать мне ваш цикл, в учебник написано:
Итерация по свойствам объекта. А вот я не совсем понял как работает ваш цикл, и для чего нужны ~~ , &&- Логическое "И"- Возвращает последний операнд, если все операнды верны. Если хоть один из операндов неверен, то возвратит первый неверный операнд. Дальше немножко понятно тоже: lengthэто обычная переменая которая перед циклом равнялось 0, а в цикле она каждый раз пребовляет по единицы сколько циклов столько и прибовлений блогадоря: + +так как это тоже самое что +1; А вот принцип работы ~~k == kне могу понять. |
~ это битовая операция
alert( ~1 ); // меняет биты 0 на 1, а единицы на ноль тоесть если смотреть в двоичной системе: 00000001 - в десятичной рано 1 после манипуляции через знак ~ будет: 11111110 - тоесть 254 или -1 в нашем случае строку переводим в число: ~~"1" == 1 |
ага понятно, не знал что так можно, а если воспользоваться методом
parseIntну вроде как: var length = 0; for(var k in massive ) { parseInt(k) == k && ++length; } alert(length);Или не правильно. |
devote,
Цитата:
|
А цикл я так понял заменяет пошагово все ключи масива на перемену k сколько ключей столько и замен, благодаря чему создаеца цикл.
|
не ну я так понял, что ~~ необходимо для получение из стокового значение числовое.
|
Цитата:
var a = "length"; alert( ~~a == a ); var a = "10"; alert( ~~a == a ); Цитата:
|
а можно это зделоть методом parseInt()
|
Цитата:
|
Цитата:
|
Цитата:
Array.prototype.test = {}; var q = [] q[4] = 1 q[66] = 2 q[200] = 3 q[2423] = 4 var length = 0 for (var i in q) if(i !="length") { alert("ПОПАЛСЯ " + ++length) } alert("ВСЕГО " +length) Maxmaxmaximus, иди кури маны |
var massive= new Array(); massive[1]="слово1"; massive[3]="слово2"; massive[5]="слово3"; for(var k in massive ) { if ( ~~k == k ) { alert( massive[ k ] ); } } Цитата:
|
Цитата:
|
Вот спасибо не знал. И чему равно такое значени
massive[ length ]? в ИЕ |
Цитата:
|
strengerst,
начните с http://learn.javascript.ru/ |
Цитата:
|
и какому? согласно кода
var massive= new Array(); massive[1]="слово1"; massive[3]="слово2"; massive[5]="слово3"; for(var k in massive ) { if ( ~~k == k ) { alert( massive[ k ] ); } }если вывести Цитата:
|
+i == i вот запутался i это ключ массива q в цикле for, а зачем +i == i
объясни не понятливому мне. |
не просто не пойму зачем нужен + перд i
|
все понял пока i равен самому себе выполняеться length ++,
как только i ,будет равняться length свойству родительскому, то условие if не сработает. или не прав |
Object.keys(q).length;) |
Не понял причем тут
length , это свойство выставлено, как enumerable=false , configurable=false alert(JSON.stringify(Object.getOwnPropertyDescriptor([], "length")))поэтому в for-in оно не появится никогда, и Object.keys такое свойство пропустит.Вообще я просто хотел обратить внимание на то, что давно уже не надо городить for-in-hasOwbProperty , а пользоваться Object.keys , который всеми браузерами поддерживается http://kangax.github.com/es5-compat-table/ Для старых браузеров достаточно скопировать код с MDN https://developer.mozilla.org/en/Jav...s#Compatiblity |
Цитата:
Цитата:
Я даю примеры решений, которые работают во всех браузерах без исключения, и не пытаюсь дать человеку то после чего он прибежит снова на форум с воплями "а какого йуха не работает в ИЕ" |
Цитата:
![]() Цитата:
|
Цитата:
Цитата:
Человеку нужно посчитать количество реальных элементов. Ему дано решение, которое работает везде. Не понимаю что вам все никак не успокоиться. Я рад что вы стараетесь юзать там супер пупер новые возможности и т.д. но ради мелочной порой задачи, прикручивать либу ради мелких задач не всегда необходимо. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Спасибо за вашу помощь и отзывчмвость. Всем спасибо что откликнулись.:thanks: .
|
Цитата:
Array.prototype.count = function () { return Object.keys(this).filter(isFinite).length; };;) |
|
Вообще-то зря вы тут про Object.keys вспомнили, он не про массивы.
Array.prototype.count = function() { return this.reduce(function(x) { return x + 1; }, 0); }; |
Часовой пояс GMT +3, время: 17:17. |