Работа с массивом
Это элементарно все навернека знают но просьба мне объяснить.
Массив обладает свойством 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=falsealert(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, время: 00:13. |