Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Длинна массива без length и циклов (https://javascript.ru/forum/misc/56130-dlinna-massiva-bez-length-i-ciklov.html)

danies 31.05.2015 20:23

Длинна массива без length и циклов
 
Есть массив такого рода:
mass[4]=4
mass[9]=9

Нужно сосчитать кол-во его элементов. length тут вернет максимальный индекс+1. Можно без циклов вывести в данном случае 2?

Vlasenko Fedor 31.05.2015 21:43

как вариант
var mass = [];
mass[4] = 4
mass[9] = 9
mass[8] = 9
alert(mass.join().split(/\d+/).length - 1);

mass.join().replace(/\,{2,}/g, ',').replace(/^\,|\,$/,'').split(',').length

danies 31.05.2015 21:48

Точно, спасибо! Жаль, что нету встроенной функции типа count()

Endy 31.05.2015 23:01

var mass = [];
mass[4]=4;
mass[9]=9;
alert(Object.keys(mass).length)

nerv_ 31.05.2015 23:05

Endy, любопытно было, запостят ли (самый очевидный) этот вариант :)

Поначалу сам хотел это сделать, но когда пригляделся, что массив - это mass желание пропало)

Цитата:

Сообщение от danies
Длинна массива без length и циклов

на-фи-га?

Endy 31.05.2015 23:31

nerv_,
Цитата:

Сообщение от nerv_
любопытно было, запостят ли (самый очевидный) этот вариант

да знаю, я Кэп :yes:

Мне почему-то такой сначала вариант прилетел в голову :write:
var mass = [];
mass[4] = 4
mass[9] = 9
alert(mass.join(' ').trim().split(/\s+/).length)


Цитата:

Сообщение от nerv_
на-фи-га?

тот же вопрос и вообще не понятно для чего нужны эти пропуски в массиве,почему бы не работать с обычным объектом?

indeterm 01.06.2015 00:55

Poznakomlus,
Что то Вы перемудрили:). Достаточно
mass.join("").length

рони 01.06.2015 01:01

Цитата:

Сообщение от indeterm
Достаточно
mass.join("").length

вы проверьте сначала

var mass = [];
mass[4] = 4
mass[9] = 9
mass[8] = 9000
alert(mass.join("").length);

indeterm 01.06.2015 01:03

Цитата:

Сообщение от nerv_
самый очевидный

Это самый хреновый вариант, BTW
var protomass = new Array
protomass[1]=1

mass=[]
mass.__proto__=protomass
mass[4] = 4
mass[9] = 9
mass[8] = 9
console.log(
 mass.join().split(/\d+/).length - 1,
 Object.keys(mass).length,
 mass.join("").length
);



//>>>> 4 3 4

indeterm 01.06.2015 01:05

рони,
Вам пожалуй, капитанская фуражка пришлась бы к лицу. Никто не предлагал? Вроде, грамотный спец, на первый взгляд, а такой тупняк постите.

рони 01.06.2015 01:09

indeterm,

то есть по вашему это mass.join("").length не бред
???

indeterm 01.06.2015 01:10

рони,
Для данного случая нет. Особенно если учитывать, что сама тема бредовая

рони 01.06.2015 01:12

indeterm,
Здраствуй троль

indeterm 01.06.2015 01:14

рони,
Чисто для прикола, я по твоей тупой логике тоже потрясу яйцами
var mass = [];
mass[4] = 4
mass[9] = "9a9"
mass[8] = 9
console.log(mass.join().split(/\d+/).length - 1);



//>>>> 4

Нужны еще пояснения? Или успокоился?

рони 01.06.2015 01:17

indeterm,
вы в строке 3 забыли буковку а убрать

indeterm 01.06.2015 01:19

Цитата:

Сообщение от рони
вы в строке 3 забыли буковку а убрать

Ах-ах-ах, как-же это я так лоханулся. Вы, кстати, тоже там, в своем примере, нули лишние убрать забыли.

Vlasenko Fedor 01.06.2015 01:25

Вот так нагляднее будет :)
var arr = [];
arr.test = function () {};
arr[4] = 4;
arr[9] = 9;
arr[5] = 'Text';
arr[8] = 9000;
console.log(
 arr.join().split(/\d+/).length - 1,
 Object.keys(arr).length,
 arr.join("").length,
 arr.join().replace(/\,{2,}/g, ',').replace(/^\,|\,$/g,'').split(',').length
);
alert(arr);

indeterm 01.06.2015 01:28

Poznakomlus,
:lol:

рони 01.06.2015 01:34

:write: через цикл всётаки проще
var protoarr = new Array,
arr = [],a = 0;
protoarr[1]=1
arr.__proto__= protoarr
arr[4] = 4;
arr[9] = 9;
arr[8] = 9000;
arr.forEach(function() {
    a++
});
alert(a)

Vlasenko Fedor 01.06.2015 02:40

Цитата:

Сообщение от рони
через цикл всё таки проще

по ходу это единственный вариант будет, так как регулярными выражениями если в тексте будет запятая :lol:
Object.keys если добавят метод :lol:

kostyanet 01.06.2015 04:46

Цитата:

Сообщение от danies
length тут вернет максимальный индекс+1

js изображает из себя настоящий язык программирования в метафоре настоящего массива. Между тем массивы в нем такие же пластилиновые, как и все остальное. Можно подумать что объект нафигачит в себя миллион пустых элементов если написать mass[1000000]=1. Херня конечно, счетчик только поставит в 1000000+1 и все. Значит никакой разницы между {} и [] не должно быть. Зачем она тогда вообще?

Была аналогичная история. Ничтоже сумняще я писал в индекс массива время его создания, ну, просто нужен был уникальный ключ. А время в юниксе сами знаете какое. Ну и получались у меня таблицы в миллиард строк типа.

ТС, отсюда вывод - юзайте вот такие скобки {} в соответствии с политикой и считайте ключи.

indeterm 01.06.2015 05:18

Цитата:

Сообщение от kostyanet
изображает из себя настоящий язык программирования

Это, по-ходу, ты изображаешь из себя человеческую особь, у которой есть мозг.

JS не "слишком гибкий" а слишком дубовый. В Ъ-ООП языках вообще все есть объект, там можно сделать вот так.

list(30, 40, 50) foreach(setSlot("foo", method(self println)))

1 to(100) foreach(?foo)


#>>>> 30
#>>>> 40
#>>>> 50


То что ты называешь "настоящими языками" -- это суррогат для энтерпрайзного быдла, JS от этого жабаговна отличается хоть как-то, в правильную сторону, к счастью, корни идут из Self, потомка Смоллтока.

kostyanet 01.06.2015 07:36

Еще один долбоящер слаще морковки ничего не ехавший.

Запишите свой arr[100000]=1 в бинарный файл прежде получив правильное смещение по размеру структуры и прочитайте этот файл.

Жду отчета.

kostyanet 01.06.2015 07:42

Как и все меня не колеб пластилин js пока не напоролся на тупой сук.

Екзель видели? Там столбцы и строки. В теории это двумерный массив. Блеать оказалось что и на практике - это настоящий двумерный массив. Не массив массивов сраный, а именно обычный двумерный.

Так вот из js в екзель нельзя взять и записать двумерный массив, потому что он не массив и не двумерный. А из точно такого по смыслу VB - все как доктор прописал, потому что в VB для быдла - все именно так, как предки завещали. И оно, разумеется, создает жуткий геморрой на каждом шагу, в силу сугубо машинной логики и функционала.

ООП для того и был придуман чтобы сделать ее ближе человеку, а скрипты - вообще не языки.


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