在 Javascript/jQuery 中创建包含两个数字之间的所有整数的数组

IT技术 javascript jquery arrays
2021-03-07 23:16:30

假设我有以下复选框:

<input type="checkbox" value="1-25" />

为了获得定义我正在寻找的范围边界的两个数字,我使用以下 jQuery:

var value = $(this).val();
var lowEnd = Number(value.split('-')[0]);
var highEnd = Number(value.split('-')[1]);

然后我如何创建一个包含lowEnd之间的所有整数的数组highEnd,包括lowEndhighEnd本身?对于这个特定的例子,显然,结果数组将是:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
6个回答
var list = [];
for (var i = lowEnd; i <= highEnd; i++) {
    list.push(i);
}
对于一般信息,在 CoffeeScript 中它看起来像“1..25”,实际上在 JavaScript 中会转换为类似的内容。所以没有更简单的方法来做到这一点。
2021-04-23 23:16:30
注意,正确的 coffeescript 符号是 [1..25]
2021-04-27 23:16:30
@FreeCandies - 没错,CoffeeScript 具有这种便利性,但您仍然必须通过编译器运行它 - 缓慢或不方便,而且您对如何手动执行它仍然一无所知。我真诚地希望我们不会用“只使用 CoffeeScript”取代“只使用 jQuery”时代
2021-05-13 23:16:30

ES6:

使用 Array.from(此处为文档):

console.log(
   Array.from({length:5},(v,k)=>k+1)
)

2021-04-23 23:16:30
当问题是如何获得两个数字之间的范围时,此答案有何相关性?
2021-04-24 23:16:30
哦,天哪,javascript 中的 lambda 表达式!谢谢(你的)信息。但是请注意,在这里,他们陈述为什么一个人应该把身体变成括号,太:vinta.com.br/blog/2015/javascript-lambda-and-arrow-functions(v,k)=>(k+1)
2021-04-29 23:16:30
..然后,...:(1)['..'](10).forEach(function(e){console.log(e)}). 例如
2021-05-01 23:16:30
Array.from此处描述了在两个数字之间创建序列developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-05-07 23:16:30

在 JavaScript ES6 中:

function range(start, end) {
  return Array(end - start + 1).fill().map((_, idx) => start + idx)
}
var result = range(9, 18); // [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
console.log(result);

为了完整起见,这里有一个可选step参数。

function range(start, end, step = 1) {
  const len = Math.floor((end - start) / step) + 1
  return Array(len).fill().map((_, idx) => start + (idx * step))
}
var result = range(9, 18, 0.83);
console.log(result);

我会在实际项目中使用range-inclusivefrom npm它甚至支持倒退,所以很酷。

到目前为止,我可以确认它在 Android WebView ( Android System WebView 60.0.3112.116, Android 6.0.1, Nexus 5)
2021-04-16 23:16:30
Array.from({length:256},(v,k)=>k++) 更好:D
2021-05-01 23:16:30
太糟糕了fill(),移动浏览器(还)不支持。
2021-05-12 23:16:30

我强烈推荐下划线或 lo-dash 库:

http://underscorejs.org/#range

(几乎完全兼容,显然 lodash 运行得更快但下划线有更好的 doco 恕我直言)

_.range([start], stop, [step])

这两个库都有一堆非常有用的实用程序。

ramda 也有一个方便的版本。
2021-05-04 23:16:30

我的循环版本;)

var lowEnd = 1;
var highEnd = 25;
var arr = [];
while(lowEnd <= highEnd){
   arr.push(lowEnd++);
}
如果使用它,速度会快几倍var arr = new Array(highEnd - lowEnd + 1)
2021-04-21 23:16:30
这种方法大大优于仅供参考的所选答案。
2021-05-07 23:16:30