Проверить, равны ли некоторые элементы массива

Нашел только вопрос "Все ли элементы равны". Меня это не устраивает, мне нужно другое: просканировать массив и взять равные элементы и протолкнуть их в другой массив.

Пример ввода:

arr = [1, 3, 3, 1]

Пример вывода:

group = [[1,1],[3,3]]

Вот мой код:

arr = [1, 3, 3, 1];
group = [];

pickNums = (a,b) => {
... ? group.push([a]) : null

arr.reduce(pickNums);

И я не знаю, что написать вместо «...». У тебя есть идеи?

Закажите массив, а затем создавайте новый массив каждый раз, когда вы достигнете другого значения. Это, наверное, самый простой способ пойти

Sirmyself 12.08.2018 22:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
276
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете взять Map и сгруппировать все значения в одну группу.

var array = [1, 3, 3, 1],
    groups = Array.from(
        array
            .reduce((m, v) => m.set(v, [...(m.get(v) || []), v]), new Map)
            .values()
    );
    
console.info(groups);

Соберите элементы в словарь с помощью Array.reduce(), затем используйте Object.values() для преобразования обратно в массив:

const arr = [1, 3, 3, 1];

pickNums = (arr) =>
  Object.values(arr.reduce((r, n) => {
    r[n] = r[n] || [];
  
    r[n].push(n);
  
    return r;
  }, {}));

const groups = pickNums(arr);

console.info(groups);

Похоже, что это можно было бы оптимально решить, сохранив счетчик похожих элементов с помощью Object / Hash.

const array = [1, 3, 3, 1];
const elementCounterObject = {};
array.map(element => {
   if (!elementCounterObject[element]) {
       elementCounterObject[element] = 1;
   } else {
       elementCounterObject[element] += 1;
   }
});

console.info(elementCounterObject);   // result: {1: 2, 3: 2}

// converting elementCounterObject to display output as per requirement
const resultingArrayToDisplay = [];

for (let element in elementCounterObject) {
    const numberOfInstances = elementCounterObject[element];
    const elementToNumberOfInstanceArray = new Array(numberOfInstances).fill(parseInt(element));
    resultingArrayToDisplay.push(elementToNumberOfInstanceArray);
};

console.info(resultingArrayToDisplay); // result: [[1,1], [3,3]]

Я сделал этот фрагмент подробным, чтобы вы могли понять его алгоритм. Очевидно, можно сбрить немного пустяков, чтобы сделать его кратким, но я надеюсь, что это решит ваш вопрос.

это то, что вы хотите:

    const arr = [1, 3, 3, 1];
    let groups = [];
    arr.map((item)=>{
          const ar2 = arr.filter( sec => sec == item );
          if (! groups.filter( sec => sec.indexOf(item)>-1).length) {
            groups.push(ar2);
          }
     });

    console.info(groups);

Другие вопросы по теме