Ruvidota

Пользователь

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

Ruvidota

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

img

 

Ребята, сижу делаю задачки.

Нужно посчитать кол-во элементов в массиве.

Попалось вот такое решение.

const arr = ["a", "a", "b", "c", "c"];
const counts = {};
arr.forEach((x) => {
  counts[x] = (counts[x] || 0) + 1;
});
console.log(counts);
Объясните как работает вот эта строка -  (counts[x] || 0) + 1;
Вообще не понимаю как это условие работает

S30N1K

Пользователь

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

S30N1K

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

Ruvidota сказал(а):
Объясните как работает вот эта строка -  (counts[x] || 0) + 1; 
Нажмите, чтобы раскрыть...

если есть что то в counts[x] то присваевается его значение, если нет, то 0, ну и по итогу прибавляется единица

Ruvidota

Пользователь

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

Ruvidota

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

img
S30N1K сказал(а):

если есть что то в counts[x] то присваевается его значение, если нет, то 0, ну и по итогу прибавляется единица

Нажмите, чтобы раскрыть...

Всё , только только дошло, спасибо большое

rot1t

Пользователь

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

rot1t

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

Там ассоциативный массив, где ключами являются элементы из arr, а значениями их количество. Если значение ключу ранее не было присвоено, то присваивается 1, иначе оно увеличивается на 1.

 

Код говна, кста. Так писать нельзя.

 

S30N1K

Пользователь

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

S30N1K

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

rot1t сказал(а):

 

 Так писать нельзя.

 

Нажмите, чтобы раскрыть...

ты запрещаешь или что? WispD.png?1621091697

rot1t

Пользователь

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

rot1t

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

S30N1K сказал(а):

ты запрещаешь или что? WispD.png?1621091697

Нажмите, чтобы раскрыть...

Зачем писать код говна? Ты экономишь одну сточку, зато пишешь супер элементарную вещь максимально сложно.

 

Ruvidota

Пользователь

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

Ruvidota

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

img
rot1t сказал(а):

Там ассоциативный массив, где ключами являются элементы из arr, а значениями их количество. Если значение ключу ранее не было присвоено, то присваивается 1, иначе оно увеличивается на 1.

 

Код говна, кста. Так писать нельзя.

 

Нажмите, чтобы раскрыть...

Ну я посмотрел несколько решений и у меня в голове было как это можно сделать. Но именно этот пример засел в голове так как  не до конца понимал как это работает. Теперь всё ясно.

ZipZap(D2)

Пользователь

Регистрация: 10.05.2015

Сообщения: 5125

Рейтинг: 2648

ZipZap(D2)

Регистрация: 10.05.2015

Сообщения: 5125

Рейтинг: 2648

rot1t сказал(а):

Зачем писать код говна? Ты экономишь одну сточку, зато пишешь супер элементарную вещь максимально сложно.

 

Нажмите, чтобы раскрыть...

условие задачи не то что тс написал

https://stackoverflow.com/questions/19395257/how-to-count-duplicate-value-in-an-array-in-javascript

rot1t

Пользователь

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

rot1t

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

ZipZap(D2) сказал(а):
Нажмите, чтобы раскрыть...

Понятно, что не то. Я по коду понял, какое там условие.

Ruvidota

Пользователь

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

Ruvidota

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

img
ZipZap(D2) сказал(а):
Нажмите, чтобы раскрыть...

Не совсем, у меня есть массив из вещей допустим, мне надо их отсортировать  и вывести на экран сколько вещей есть из конкретного бренда

Lancer.Rev.X

Пользователь

Регистрация: 07.12.2014

Сообщения: 4181

Рейтинг: 2228

Lancer.Rev.X

Регистрация: 07.12.2014

Сообщения: 4181

Рейтинг: 2228

img
rot1t сказал(а):

Зачем писать код говна? Ты экономишь одну сточку, зато пишешь супер элементарную вещь максимально сложно.

 

Нажмите, чтобы раскрыть...

наверное, тут подходит это решение, так как данная задача нужна для обучения особенностям языка, а не для реального применения, решив задачу таким образом, тс узнал про то, что объект возвращает undefined по несуществующему ключу, а также про последовательное вычисление выражений с помощью оператора ||

rot1t

Пользователь

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

rot1t

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

Ruvidota сказал(а):

Не совсем, у меня есть массив из брендов допустим, мне надо их отсортировать  и вывести на экран сколько вещей есть из конкретного бренда

Нажмите, чтобы раскрыть...

Количество элементов в массиве это размер массива. Но все уже поняли, что ты имел в виду

Lancer.Rev.X сказал(а):

наверное, тут подходит это решение, так как данная задача нужна для обучения особенностям языка, а не для реального применения, решив задачу таким образом, тс узнал про то, что объект возвращает undefined по несуществующему ключу, а также про последовательное вычисление выражений с помощью оператора ||

Нажмите, чтобы раскрыть...

Согласен. Но тс ее не сам решил, а нашел готовый код на стековерфлоу HAhaa.png?1616514247

S30N1K

Пользователь

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

S30N1K

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

rot1t сказал(а):

Зачем писать код говна? Ты экономишь одну сточку, зато пишешь супер элементарную вещь максимально сложно.

 

Нажмите, чтобы раскрыть...

ну ты серьезно сейчас? PepeCringe.png?1598477741

Видно, что человек в вопросе не разбирается, собсна с помощью понять что, куда и зачем - он и попросил.

Ты ему своим постом выше рассказываешь некую инфу, которую он, скоей всего не поймет.

Еще и код гавном называешь без обьяснений почему он гавно PepeOK.png?1592047625

Ruvidota

Пользователь

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

Ruvidota

Регистрация: 21.09.2016

Сообщения: 299

Рейтинг: 211

img
rot1t сказал(а):

Количество элементов в массиве это размер массива. Но все уже поняли, что ты имел в виду

 

Согласен. Но тс ее не сам решил, а нашел готовый код на стековерфлоу HAhaa.png?1616514247

Нажмите, чтобы раскрыть...

Я же написал сверху, что я понимал как её решить по моему, я смотрю несколько решений на одну задачу, не понимаю что ты хочешь донести, реально)

Что ты лучше понимаешь в языке? я и не спорю 

rot1t

Пользователь

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

rot1t

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

S30N1K сказал(а):

Еще и код гавном называешь без обьяснений почему он гавно PepeOK.png?1592047625

Нажмите, чтобы раскрыть...

Я объяснил, чел PepeCringe.png?1598477741 Нашелся даже человек, который контраргументировал это

S30N1K

Пользователь

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

S30N1K

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

rot1t сказал(а):

Я объяснил, чел PepeCringe.png?1598477741 Нашелся даже человек, который контраргументировал это

Нажмите, чтобы раскрыть...

видать я писал свое сообщение слишком долго Okayg.png?1639663029

KRATI

Пользователь

Регистрация: 25.09.2021

Сообщения: 2803

Рейтинг: 1311

KRATI

Регистрация: 25.09.2021

Сообщения: 2803

Рейтинг: 1311

img
Ruvidota сказал(а):

Объясните как работает вот эта строка

Нажмите, чтобы раскрыть...

это классический прием в жаваскрипте, если ты его не понимаешь ну может стоит почитать книжку про основы жс.

 

rot1t сказал(а):

Так писать нельзя.

Нажмите, чтобы раскрыть...

конечно можно так писать и даже нужно, в контексте джаваскрипта. для примера можешь погуглить популярные библиотеки на жаваскрипте (далеко ходить не нужно jquery/init.js at main · jquery/jquery · GitHub), все это используют и не морщатся, следовательно этот прием является частью языка

 

более того в языках со строгой типизацией есть аналогии What is the nil coalescing operator? - free Swift 5.4 example code and tips (hackingwithswift.com)

 

таким образом я заявляю что ты максимум знаешь паскаль с курса школы и не можешь делать утверждения по поводу программирования

rot1t

Пользователь

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

rot1t

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

krati сказал(а):

это классический прием в жаваскрипте, если ты его не понимаешь ну может стоит почитать книжку про основы жс.

 

конечно можно так писать и даже нужно, в контексте джаваскрипта. для примера можешь погуглить популярные библиотеки на жаваскрипте (далеко ходить не нужно jquery/init.js at main · jquery/jquery · GitHub), все это используют и не морщатся, следовательно этот прием является частью языка

 

более того в языках со строгой типизацией есть аналогии What is the nil coalescing operator? - free Swift 5.4 example code and tips (hackingwithswift.com)

 

таким образом я заявляю что ты максимум знаешь паскаль с курса школы и не можешь делать утверждения по поводу программирования

Нажмите, чтобы раскрыть...

Боже, ты такой бред высрал, что мне даже лень объяснять тебе. Кстати, я отучился на прогера в одном из лучших вузов раисы. Удачи тебе там с изучением паскаля, ага

дуфник

Пользователь

Регистрация: 08.04.2013

Сообщения: 3971

Рейтинг: 2983

дуфник

Регистрация: 08.04.2013

Сообщения: 3971

Рейтинг: 2983

rot1t сказал(а):

Зачем писать код говна? Ты экономишь одну сточку, зато пишешь супер элементарную вещь максимально сложно.

 

Нажмите, чтобы раскрыть...

тезис хороший, только в этой ситуации это нормально, подобным образом почти везде пишут щас, ну разве что заменить || на ??, хотя тут и это и не будет иметь значения

 

(мимо программист 7 лет опыта)

Aragorn_

Пользователь

Регистрация: 20.12.2021

Сообщения: 389

Рейтинг: 48

Нарушения: 100

Aragorn_

Регистрация: 20.12.2021

Сообщения: 389

Рейтинг: 48

Нарушения: 100

rot1t сказал(а):

Там ассоциативный массив, где ключами являются элементы из arr, а значениями их количество. Если значение ключу ранее не было присвоено, то присваивается 1, иначе оно увеличивается на 1.

 

Код говна, кста. Так писать нельзя.

 

Нажмите, чтобы раскрыть...

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

rot1t

Пользователь

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

rot1t

Регистрация: 15.01.2016

Сообщения: 5940

Рейтинг: 2136

Нарушения: 104

Aragorn_ сказал(а):

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

Нажмите, чтобы раскрыть...

Загугли, что такое тернарный оператор, сына, не позорься

Aragorn_

Пользователь

Регистрация: 20.12.2021

Сообщения: 389

Рейтинг: 48

Нарушения: 100

Aragorn_

Регистрация: 20.12.2021

Сообщения: 389

Рейтинг: 48

Нарушения: 100

rot1t сказал(а):

Загугли, что такое тернарный оператор, сына, не позорься

Нажмите, чтобы раскрыть...

что ты несешь позорище?) судя по тому что ты высрал вначале, то ты вообще не имеешь права мне писать подобное))

KRATI

Пользователь

Регистрация: 25.09.2021

Сообщения: 2803

Рейтинг: 1311

KRATI

Регистрация: 25.09.2021

Сообщения: 2803

Рейтинг: 1311

img
rot1t сказал(а):

я отучился на прогера в одном из лучших вузов

Нажмите, чтобы раскрыть...

плохо учился значит

Александр

Почетный пользователь

Регистрация: 10.08.2013

Сообщения: 5305

Рейтинг: 4186

Александр

Регистрация: 10.08.2013

Сообщения: 5305

Рейтинг: 4186

Ruvidota сказал(а):

Нужно посчитать кол-во элементов в массиве.

Нажмите, чтобы раскрыть...

const counts = ['a', 'a', 'b', 'b', 'c'].reduce((a, i) => (a = (a ?? 0) + 1, a), [])

 

console.table(counts)

 

Где

['a', 'a', 'b', 'b', 'c'] - начальный массив

a - формируемый массив

i - текущий элемент из начального массива

?? - нулевое слияние (если левый элемент null или undefined - возвращаем правое значение, иначе левое)

 

Ruvidota сказал(а):
Объясните как работает вот эта строка -  (counts[x] || 0) + 1;
Вообще не понимаю как это условие работает
Нажмите, чтобы раскрыть...

|| - или

Просто условие. Если counts[x] не равен null или undefined, то вернёт его и прервёт условие, иначе пойдёт проверять следующий пункт (в данном случае просто вернёт 0)

 

rot1t сказал(а):

Боже, ты такой бред высрал, что мне даже лень объяснять тебе. Кстати, я отучился на прогера в одном из лучших вузов раисы. Удачи тебе там с изучением паскаля, ага

Нажмите, чтобы раскрыть...

- Кстати я отучился на прогера в одном из лучших вузов раисы

- Но я тебя не спраш..

- Всё, мне некогда, пока

 

 

Руна Дегенерации

Пользователь

Регистрация: 08.04.2021

Сообщения: 556

Рейтинг: 622

Нарушения: 105

Руна Дегенерации

Регистрация: 08.04.2021

Сообщения: 556

Рейтинг: 622

Нарушения: 105

Еси рассматривать эту задачу в браузере, то использовать оператор ??, ну и такое как ?. идея не очень хорошая и лучше обойтись ||, т.к. тут условие позволяет. А если в ноде, то можно вообще использовать Set и в него всё запихивать. Zq2UmE7.png

Александр сказал(а):

|| - или

Просто условие. Если counts[x] не равен null или undefined, то вернёт его и прервёт условие, иначе пойдёт проверять следующий пункт (в данном случае просто вернёт 0)

Нажмите, чтобы раскрыть...

Не совсем корректно. Если первое условие при приведении в Boolean возвращает false, то выполняется второе условие. 0 или '' - тоже false.