#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);