繁体   English   中英

拼接方法不会从数组中删除项目

[英]Splice method not deleting items out of array

我正在尝试实现一个函数,该函数接受三个参数(min、max、step)并生成从 min 到 max 的整数范围,并带有 step。 第一个整数是最小值,第二个是范围的最大值,第三个是步长。

下面是它应该是什么样子的示例: generateRange(2, 10, 2) 应该返回 [2,4,6,8,10] 的数组。

我正在使用 splice 方法删除数组中大于 max 参数的任何现有元素。

 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, , , , ]

它似乎没有删除项目。 我错过了什么? 谢谢!

三元运算符有点奇怪,因为表达式没有存储。 它通过删除太大的值来修复数组。 这工作一次,但如果有第二次,会增加,并且通过分配给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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM