Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Помогите найти одинаковые значения (https://javascript.ru/forum/css-html/83458-pomogite-najjti-odinakovye-znacheniya.html)

Boyenerji 13.12.2021 20:00

Помогите найти одинаковые значения
 
Помогите найти повторяющиеся значения в массиве и изменить их так, что бы в массиве остались только уникальные значения. Неделю голову ломаю, хватило мозгов только на это :D Он изменяет значения, но они все равно повторяются.

class Symbols {
    constructor(name, count, see) {
        this.name = name;
        this.count = count;
        this.see = see;
    }
}
    
const hotDog = new Symbols('🌭', randomInteger(1, 15), true),
      poganka = new Symbols('🍄', randomInteger(1, 15), true),
      hallowen = new Symbols('🎃', randomInteger(1, 15), true),
      home = new Symbols('🏠', randomInteger(1, 15), true),
      konfeta = new Symbols('🍭', randomInteger(1, 15), true),
      sun = new Symbols('🌞', randomInteger(1, 15), true);

let arrSimvols = [hotDog, poganka, hallowen, home, konfeta, sun];

for (let a = 0; a < arrSimvols.length; a++) {
    for (let c = a + 1; c < arrSimvols.length; c++) {
        if (arrSimvols[a].count == arrSimvols[c].count) {
            while (arrSimvols[a].count == arrSimvols[c].count) {
                arrSimvols[a].count = randomInteger(1, 15);
                arrSimvols[c].count = randomInteger(1, 15);
            }
        }
    }
}

рони 13.12.2021 20:16

Boyenerji,
не генерируйте числа, перемешайте массив и будет 15 уникальных значений.

ksa 13.12.2021 20:20

Один из вариантов "перемешивания" массива...
https://learn.javascript.ru/task/shuffle

voraa 13.12.2021 20:48

Не совсем понятна задача и цель.
Нужно, что бы у каждого объекта Symbols поле count было уникальным?
Тогда надо при создании присваивать уникальное значение.

Boyenerji 13.12.2021 20:59

Всё верно. А как это сделать?

рони 13.12.2021 21:04

уникальные номера
 
Boyenerji,
<pre>   <script>
class Symbols {
        constructor(name, count, see) {
                this.name = name;
                this.count = count;
                this.see = see;
        }
}
function randomInteger(min, max)
{
let length = max - min + 1;
let arr = Array.from({length}, (_, i) => min + i);
function shuffle()
{
   arr.forEach((_, i) => {
   let a = Math.trunc(Math.random() * length);
   [arr[i], arr[a]] = [arr[a], arr[i]];
   })
   return arr.slice(0)
}
   let temp = shuffle();
   return _ => {
   temp.length || (temp = shuffle());
   return arr.pop()
   }
}
const count = randomInteger(1, 15);
const hotDog = new Symbols('????', count(), true),
            poganka = new Symbols('????', count(), true),
            hallowen = new Symbols('????', count(), true),
            home = new Symbols('????', count(), true),
            konfeta = new Symbols('????', count(), true),
            sun = new Symbols('????', count(), true);
let arrSimvols = [hotDog, poganka, hallowen, home, konfeta, sun];
 document.write(JSON.stringify(arrSimvols, "", 1))
    </script></pre>

voraa 13.12.2021 21:06

Я бы все это так сделал
class Symbols {

    static nCount =1;

    name = '';
    count = Symbols.nCount ++;
    see;

    constructor(name, see = true) {
        this.name = name;
        this.see = see;
    }
}
     
const hotDog = new Symbols('������'),
      poganka = new Symbols('������'),
      hallowen = new Symbols('������'),
      home = new Symbols('������'),
      konfeta = new Symbols('������'),
      sun = new Symbols('������');
 
let arrSimvols = [hotDog, poganka, hallowen, home, konfeta, sun];


Ну есть другой вариант генерации уникальных значений - но весь вопрос как потом это поле используется и для чего.
Почему при каждом редактировании эти картинки превращаются хрен знает во что, я догадываюсь, но не понимаю, зачем так редактор форума сделан.


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