Нашел только вопрос "Все ли элементы равны". Меня это не устраивает, мне нужно другое: просканировать массив и взять равные элементы и протолкнуть их в другой массив.
Пример ввода:
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);
И я не знаю, что написать вместо «...». У тебя есть идеи?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Соберите элементы в словарь с помощью 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);
Закажите массив, а затем создавайте новый массив каждый раз, когда вы достигнете другого значения. Это, наверное, самый простой способ пойти