根据传递的参数将值多次插入数组

时间:2017-08-30 14:58:22

标签: javascript

我有一个这样的数组:

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.

我如何实现这一目标?

6 个答案:

答案 0 :(得分:2)

试试这个

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将其展平。

答案 1 :(得分:1)

以下功能应该起作用

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;
}

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

使用Array#Filter从旧数组中删除所有重复项,然后遍历所有元素并将其存储在新数组中。

答案 4 :(得分:1)

您可以使用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));

答案 5 :(得分:1)

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

multiply_array函数有两个参数,一个数组和一个乘法整数。它通过数组过滤并通过比较位置查找所有唯一值。然后,它映射所有剩余的唯一整数,并用一个数组替换它们,该数组是传入的乘法整数指定的长度,并用唯一值填充。所有这些都连接在一起形成一个数组。

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