Ввод одинаковых значений в массив

#javascript

#javascript

Вопрос:

Мне было интересно, может ли кто-нибудь указать мне правильное направление. У меня есть массив, который содержит числа, некоторые из них одинаковые. Я хотел бы создать новый массив, содержащий все те же числа в массиве внутри нового массива. Не уверен, что я правильно это объяснил, мне тоже сложно печатать на этом новом телефоне. Использование JavaScript, кстати, должно быть добавлено первым.

const array = [1,1,1,2,10,25,10]

Я хочу

постоянный новый массив = [[1,1,1],2,[10,10],25]

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

Комментарии:

1. Каким должен быть порядок этого нового массива? Скорее всего, вы захотите сделать это с Array::reduce и использовать Map или объект в качестве накопителя для группировки и использования Array::map для преобразования Map /object обратно в массив.

2. вы можете добавлять одинаковые значения с разными индексами

3. Если вам нужно жестко запрограммированное решение, выполните цикл по всем индексам и получите одинаковое значение и поместите его в массив, затем создайте новый массив для размещения результатов. Используйте метод пузырькового цикла, чтобы выполнить цикл до самого массива.

Ответ №1:

 const array = [1,1,1,2,10,25,10];
const groupedNumbersMap = array.reduce((acc, num) => {
  if (!(num in acc)) acc[num] = num;
  else {
    const value = acc[num];
    if (Array.isArray(value)) value.push(num);
    else acc[num] = [num, num];
  }
  return acc;
}, {});
const groupedNumbers = Object.keys(groupedNumbersMap).map(k => groupedNumbersMap[k]);

console.log(groupedNumbers);  

Или с Map :

 const array = [1,1,1,2,10,25,10];
const groupedNumbers = Array.from(array.reduce((acc, num) => {
  if (!acc.has(num)) acc.set(num, num);
  else {
    const value = acc.get(num);
    if (Array.isArray(value)) value.push(num);
    else acc.set(num, [num, num]);
  }
  return acc;
}, new Map()).values());

console.log(groupedNumbers);  

Ответ №2:

 enter code here
const array = [1, 1, 1, 2, 10, 25, 10];
array.sort((a, b) => a - b)
const newList = array.reduce((acc, item, idx) => {
    if (idx === 0) {
        return [[item]];
    } else {
        return acc.reduce((icc, a, i) => {
            if(acc.flat().includes(item)) {
                if(a.includes(item)) {
                    return [...icc, [...a, item]];
                }   
                return [...icc, a];
            } else {
                return [...acc, [item]]
            }

        }, [])
    }
}, [])
console.log(newList);