我有这个数组[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];
}
}
那些好吗?或者你认为把它放在链子上并不是一个好主意,如果是这样的话呢?
答案 0 :(得分:3)
您可以使用模运算循环到最终数组的长度,然后使用索引基本上循环并将其推送到新数组
使用当前数组值%array.length将通过循环运动来获取数组的当前位置
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;
答案 1 :(得分:0)
简单的while循环就足够了:
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;
答案 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));