在javascript

时间:2018-05-31 00:17:39

标签: javascript

我有这个数组[1,2,3]

我希望能够将其长度设置为7

结果有[1,2,3,1,2,3,1]。

任何?

const arr = [1,2,3];

// Something like
arr.resize(7);

console.log(arr); // [1,2,3,1,2,3,1]

编辑: 根据下面的 chevybow 回答,我写了这个函数来满足我的需求。

// Immutable
Array.prototype.resize = function(size) {
    const array = Array(size);
    for(let i = 0; i < size; i++) {
        array[i] = this[i%this.length];
    }
    return array;
}

// Mutable
Array.prototype.resize = function(size) {
    const array = this.slice(0);
    this.length = size;
    for(let i = 0; i < size; i++) {
        this[i] = array[i%array.length];
    }
}

那些好吗?或者你认为把它放在链子上并不是一个好主意,如果是这样的话呢?

3 个答案:

答案 0 :(得分:3)

您可以使用模运算循环到最终数组的长度,然后使用索引基本上循环并将其推送到新数组

使用当前数组值%array.length将通过循环运动来获取数组的当前位置

&#13;
&#13;
let num = 7;
let array = [1,2,3];
let result = [];
for(let i = 0; i < num; i++){
  result.push(array[i%array.length]);
}

console.log(result)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

简单的while循环就足够了:

&#13;
&#13;
function repeat(arr, toLength) {
  let output = [...arr];
  while (output.length < toLength) output = [...output, ...arr];
  return output.slice(0, toLength);
}
console.log(repeat([1, 2, 3], 7));
console.log(repeat([1, 2, 3], 2));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这个版本怎么样:

const nums = [1, 2, 3];

function resize(arr, length) {
  let position = 0;
  return Array.from(Array(length)).reduce((acc, _, i) => {
    return acc.concat(arr[i % arr.length]);
  }, []);
}

console.log(resize(nums, 7));