Вставить значение несколько раз в массив на основе переданного аргумента

-4

У меня есть такой массив:

var oldArr = [2,3,4,2,3,5,6,4,2,3,2];

var newArr = [];

Я передаю аргумент (число) функции, которая должна вставлять значения из oldArr в newArr, принимая аргумент как length для каждого элемента, найденного в старом массиве.

function getNumbers(num){
console.log('value passed is ', num);
for(var i=0; i<arr.length;i++){
newArr.push(arr[i]);
}
console.log('newArr', newArr);
}
getNumbers(2);

Например,

if I pass number 2 as in getNumbers(2);

new array output should be:

[2,2,3,3,4,4,5,5,6,6] //as the argument/length passed is 2.

if I pass number 3 as in getNumbers(3);

[2,2,2,3,3,3,4,4,4,5,5,5,6,6,6] //as the argument/length passed is 3.

Как мне это достичь?

спросил(а) 2021-01-25T16:57:13+03:00 4 месяца, 3 недели назад
1
Решение
77

Попробуй это

var oldArr = [2,3,4,2,3,5,6,4,2,3,2];

function getNumbers(arr, num){
return Array.from(new Set(arr))
.map((e) => new Array(num).fill().map(v => e))
.reduce((a, b) => a.concat(b),[]);
}

console.log(getNumbers(oldArr, 2));
console.log(getNumbers(oldArr, 3));

Прежде всего, вам нужно получить уникальные значения из массива. Это Array.from(new Set(arr)); ,

Во-вторых, мы можем выделить новый массив для каждого числа (чтобы он мог сгладить его позже). Это new Array(num).fill().map(v => e)). Результат этого будет подобен [[2,2],[3,3],[4,4]..] и т.д.

И, наконец, сгладьте все, используя Array.prototype.reduce.

ответил(а) 2021-01-25T16:57:13+03:00 4 месяца, 3 недели назад
64

Вы можете сделать это, используя цепочку методов Array.prototype:

var oldArr = [2,3,4,2,3,5,6,4,2,3,2];

function getNumbers(num){
return oldArr
.filter((elem, index, arr) => !arr.slice(index + 1).includes(elem))
.sort((prev, next) => next < prev)
.reduce((result, elem) => result.concat(Array(num).fill(elem)), [])
}

console.log(getNumbers(2));
console.log(getNumbers(3));

ответил(а) 2021-01-25T16:57:13+03:00 4 месяца, 3 недели назад
63

Следующая функция должна работать

function duplicateN(oldArray, newArray, N) {
for (var i = 0; i < oldArray.length; i++) {
for (var j = 0; j < N; j++) {
newArray.push(oldArray[i]);
}
}
}

Он просто выполняет итерацию по каждому значению в исходном массиве и затем вставляет его в N раз.

Я не уверен в использовании этого, но если newArray всегда пуст, что-то вроде этого будет более ремонтопригодным

function duplicateN(inputArray, N) {
var duplicatedArray = [];
for (var i = 0; i < inputArray.length; i++) {
for (var j = 0; j < N; j++) {
duplicatedArray.push(inputArray[i]);
}
}
return duplicatedArray;
}

ответил(а) 2021-01-25T16:57:13+03:00 4 месяца, 3 недели назад
63

  let multiply_array = (arr, mi = 1) => 
[].concat.apply([], arr.filter((i, ind) =>
arr.indexOf(i) == ind).map(i =>
Array(mi).fill(i)));

Функция multiply_array принимает два параметра, массив и умножающее целое число. Он фильтрует через массив и находит все уникальные значения, сравнивая положение. Затем он отображает все оставшиеся уникальные целые числа и заменяет их массивом, который является длиной, указанной переданным в умножении integer, и заполняется уникальным значением. Все это объединяется вместе, чтобы сформировать один массив.

var oldArr = [2, 3, 4, 2, 3, 5, 6, 4, 2, 3, 2];
var newArr = [];

let multiply_array = (arr, mi = 1) =>
[].concat.apply([], arr.filter((i, ind) =>
arr.indexOf(i) == ind).map(i =>
Array(mi).fill(i)));

console.log(multiply_array(oldArr, 3));

ответил(а) 2021-01-25T16:57:13+03:00 4 месяца, 3 недели назад
63

var arr = [2,3,4,5];

function getNumbers(num){
var j = 1;
var newArr = [];
for(var i=0; i<arr.length;i++)
{
j = 1;
while(j<=num){
newArr.push(arr[i]);
j++;
}
}
console.log(newArr.join());
}
getNumbers(4);

ответил(а) 2021-01-25T16:57:13+03:00 4 месяца, 3 недели назад
64

var oldArr = [2,3,4,2,3,5,6,4,2,3,2];

var uniqueArr = oldArr.filter(function(elem, index, self) {
return index == self.indexOf(elem);
})
console.log(uniqueArr)

function getNumbers(num){
var newArr = [];
for(var i=0; i<uniqueArr.length;i++){
for(var j=0;j<num;j++)
newArr.push(uniqueArr[i]);
}
console.log('newArr', newArr);
}
getNumbers(2);
getNumbers(3);

Удалите все ваши дубликаты из старого массива с помощью массива Array # Filter, затем пропустите весь элемент и сохраните его в новом массиве.

ответил(а) 2021-01-25T16:57:13+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема