拼接方法不从数组中删除项目
Splice method not deleting items out of array
我正在尝试实现一个函数,该函数接受三个参数(最小值、最大值、步长)并生成从最小值到最大值的整数范围,以及步长。第一个整数是最小值,第二个是范围的最大值,第三个是步长。
下面是它应该是什么样子的示例:
generateRange(2, 10, 2) 应该 return [2,4,6,8,10] 的数组。
我正在使用 splice 方法删除数组中大于最大参数的任何现有元素。
function generateRange(min, max, step) {
var arr = [];
var count = min;
for (var i = 0; i < max / step; i++) {
arr[i] = count;
count = count + step;
arr[i] > max ? arr.splice(i, 1) : arr[i];
}
return arr;
}
console.log(generateRange(2, 10, 2));
每当我 console.log
我的结果我在最后一项之后得到一堆逗号......所以它看起来像这样:[2,4,6,8,10, , , , ]
它似乎没有删除项目。我错过了什么?谢谢!
三元运算符有点奇怪,因为表达式没有存储。它通过删除太大的值来修复数组。这一次有效,但如果有第二次,i 将增加,并且通过对 arr[i] 的赋值,数组的长度又好像之前没有执行过 splice
(除了 i-1 索引处的未定义值)。
最好在 分配超出范围的值之前退出循环 。在这种情况下继续循环是没有意义的。
因此,将 count
变量设为循环变量和条件:
function generateRange(min, max, step){
var arr = [];
for(var count = min; count <= max; count+=step){
arr.push(count);
}
return arr;
}
var res = generateRange(2, 10, 2);
console.log(res);
一个可读性较差但较短的 ES6 版本是:
function generateRange(min, max, step){
return Array.from(Array(Math.floor((max-min)/step)+1), (x,i) => min+i*step);
}
let res = generateRange(2, 10, 2);
console.log(res);
我正在尝试实现一个函数,该函数接受三个参数(最小值、最大值、步长)并生成从最小值到最大值的整数范围,以及步长。第一个整数是最小值,第二个是范围的最大值,第三个是步长。
下面是它应该是什么样子的示例: generateRange(2, 10, 2) 应该 return [2,4,6,8,10] 的数组。
我正在使用 splice 方法删除数组中大于最大参数的任何现有元素。
function generateRange(min, max, step) {
var arr = [];
var count = min;
for (var i = 0; i < max / step; i++) {
arr[i] = count;
count = count + step;
arr[i] > max ? arr.splice(i, 1) : arr[i];
}
return arr;
}
console.log(generateRange(2, 10, 2));
每当我 console.log
我的结果我在最后一项之后得到一堆逗号......所以它看起来像这样:[2,4,6,8,10, , , , ]
它似乎没有删除项目。我错过了什么?谢谢!
三元运算符有点奇怪,因为表达式没有存储。它通过删除太大的值来修复数组。这一次有效,但如果有第二次,i 将增加,并且通过对 arr[i] 的赋值,数组的长度又好像之前没有执行过 splice
(除了 i-1 索引处的未定义值)。
最好在 分配超出范围的值之前退出循环 。在这种情况下继续循环是没有意义的。
因此,将 count
变量设为循环变量和条件:
function generateRange(min, max, step){
var arr = [];
for(var count = min; count <= max; count+=step){
arr.push(count);
}
return arr;
}
var res = generateRange(2, 10, 2);
console.log(res);
一个可读性较差但较短的 ES6 版本是:
function generateRange(min, max, step){
return Array.from(Array(Math.floor((max-min)/step)+1), (x,i) => min+i*step);
}
let res = generateRange(2, 10, 2);
console.log(res);