Javascript:
function count( mixed_var, mode ) { // Count elements in an array, or properties in an object
//
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + input by: _argos
var key, cnt = 0;
if( mode == 'COUNT_RECURSIVE' ) mode = 1;
if( mode != 1 ) mode = 0;
for (key in mixed_var){
cnt++;
if( mode==1 && mixed_var[key] && (mixed_var[key].constructor === Array || mixed_var[key].constructor === Object) ){
cnt += count(mixed_var[key], 1);
}
}
return cnt;
}
Примеры:
count([[0,0],[0,-4]], 'COUNT_RECURSIVE');
6
count({'one' : [1,2,3,4,5]}, 'COUNT_RECURSIVE');
6
|
и в каком месте это аналог пхп? по результату?
function count( mixed_var, mod ) { // Count elements in an array, or properties in an object var key, cnt = 0; mode = 1; if( mod == 'NO_RECURSIVE' ) mode = 0; for (key in mixed_var){ cnt++; if( mode && mixed_var[key] && (mixed_var[key].constructor === Array || mixed_var[key].constructor === Object) ){ cnt += count(mixed_var[key], 1)-1; } } return cnt; }Херня какает,в реале в массиве 2 значения а оно мне тычет 7!!!
Можно подробнее - пример в студию?
++cnt; — быстрее, не создаётся временной переменной для значения до инкремента.
а чем вам не нравится стандартное рещение my_array.length
>> а чем вам не нравится стандартное рещение my_array.length
тем, что оно работает совсем не так. как известно, возвращает последний ключ в массиве+1. Следовательно, работает только если ключ - число.
а если в качесиве ключа используется строка, то .length не возвращает ничего.
не знаю как тут работает ваш код, я решил задачу довольно банально:
function count(array) { var cnt=0; for (var i in array) { if (i) { cnt++ } } return cnt }Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.