如何在javascript中生成数字/字符序列?

32 javascript jquery

有没有办法在javascript中生成字符或数字序列?

例如,我想创建包含8个1的数组.我可以用for循环来做,但想知道是否有一个jQuery库或javascript函数可以为我做?

Ari*_*yat 38

没有for循环,这是一个解决方案:

Array.apply(0, Array(8)).map(function() { return 1; })
Run Code Online (Sandbox Code Playgroud)

解释如下.

Array(8)生成一个包含8个元素的稀疏数组undefined.该apply技巧将它变成一个密集排列.最后,用map,我们替换undefined(相同)的值1.

  • 我喜欢这个.在搜索中找到它,这正是我想要的.这里有一个小小的修改来创建一个系列:`Array.apply(0,Array(8)).map(function(_,b){return b + 1;})=> [1,2,3,4, 5,6,7,8]`要映射的args是用于其他有趣用途的`element,index,array`. (6认同)
  • 以下是关于数组的简短解释:http://www.2ality.com/2012/06/dense-arrays.html. (5认同)

Gou*_*J.M 25

这是迄今为止最简单的一个

const sequence = [...Array(10).keys()]
console.log(sequence)
Run Code Online (Sandbox Code Playgroud)

Output : [0,1,2,3,4,5,6,7,8,9]


Dag*_*bit 16

for (var i=8, a=[]; i--;) a.push(1);
Run Code Online (Sandbox Code Playgroud)

  • 需要moar jquery?嗯,这有用吗:`for(var i = 8,a = []; i--;)a.push($(1));` (6认同)

Nic*_*ver 15

您可以根据自己的例子制作自己的可重复使用的功能:

function makeArray(count, content) {
   var result = [];
   if(typeof content == "function") {
      for(var i = 0; i < count; i++) {
         result.push(content(i));
      }
   } else {
      for(var i = 0; i < count; i++) {
         result.push(content);
      }
   }
   return result;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以做以下任何一个:

var myArray = makeArray(8, 1);
//or something more complex, for example:
var myArray = makeArray(8, function(i) { return i * 3; });
Run Code Online (Sandbox Code Playgroud)

你可以在这里尝试一下,注意上面的例子根本不依赖于jQuery,所以你可以不用它.你只是没有从图书馆获得任何东西这样的东西:)


g.s*_*sui 11

如果您使用较新的Javascript语法,可以使用以下方法实现:

Array(8).fill(1)
Run Code Online (Sandbox Code Playgroud)

以下工作正常,但正如Matt指出的那样,关键字'new'是多余的.

new Array(8).fill(1)
Run Code Online (Sandbox Code Playgroud)

  • 这也可以很容易地扩展到一个序列.`Array(8).fill().map((v,i)=> i)` (4认同)

kts*_*com 10

使用Jquery:


$.map($(Array(8)),function(val, i) { return i; })
Run Code Online (Sandbox Code Playgroud)

返回:

[0, 1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)
$.map($(Array(8)),function() { return 1; })
Run Code Online (Sandbox Code Playgroud)

返回:

[1, 1, 1, 1, 1, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)


Tom*_*wik 7

2016年-现代浏览器功能到来了。一直不需要jquery。

Array.from({length: 8}, (el, index) => 1 /* or index */);
Run Code Online (Sandbox Code Playgroud)

您可以将箭头功能替换为简单的回调功能,以覆盖受支持的浏览器。至少对我来说,这是一步中迭代初始化数组的最简单方法。

注意:此解决方案不支持IE,但是在developer.mozilla.org / ...上有针对此的polyfill


Eva*_*oll 7

range(start,end,step):使用 ES6 迭代器

您可以轻松创建range()可以充当迭代器的生成器函数。这意味着您不必预先生成整个数组。

function * range ( start, end, step ) {
  let state = start;
  while ( state < end ) {
    yield state;
    state += step;
  }
  return;
};
Run Code Online (Sandbox Code Playgroud)

现在您可能想要创建一些东西,从迭代器预先生成数组并返回一个列表。这对于接受数组的函数很有用。为此我们可以使用Array.from()

const generate_array = (start,end,step) => Array.from( range(start,end,step) );
Run Code Online (Sandbox Code Playgroud)

现在您可以轻松生成静态数组,

const array = generate_array(1,10,2);
Run Code Online (Sandbox Code Playgroud)

但是,当某些东西需要迭代器(或者让您可以选择使用迭代器)时,您也可以轻松创建一个迭代器。

for ( const i of range(1, Number.MAX_SAFE_INTEGER, 7) ) {
  console.log(i)
}
Run Code Online (Sandbox Code Playgroud)


men*_*ode 6

一班轮:

new Array(10).fill(1).map( (_, i) => i+1 )
Run Code Online (Sandbox Code Playgroud)

产量:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
Run Code Online (Sandbox Code Playgroud)