【问题标题】:Create array using _.each使用 _.each 创建数组
【发布时间】:2015-08-13 05:56:17
【问题描述】:

我有这个练习要解决:

使用 _.each 从 1, 1000(含)创建一个数组

我真的不知道该怎么做,我认为这是不可能的......

你能帮帮我吗?

【问题讨论】:

标签: javascript arrays functional-programming underscore.js each


【解决方案1】:

您可以通过将所需的数组长度传递给 Array 构造函数来创建一个包含 1000 个元素的空数组,然后使用 _.each() 为数组中的每个索引分配值。

var array = _.each(new Array(1000), function(v, i, a) {
  a[i] = i + 1;
});
console.log(array)
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

【讨论】:

  • 哦,这太容易了,我看不到它:S 谢谢!
  • 这将取决于对分配的解释很多。 :-)
【解决方案2】:

问题上的functional-programming 标签就是线索。 :-) 在函数式编程中,循环通常写成递归。那么我们如何使用递归来构建使用_.each 的数组呢?通过回调调用它:

var array = _.each([1], function cb(e, i, a) {
  if (a.length < 1000) {
    a.push(a.length + 1);
    _.each(a, cb);
  }
});
snippet.log(array.length);
snippet.log(array.join(", "));
<script src="http://underscorejs.org/underscore-min.js"></script>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

或者是真的顽皮,我们可以从一个 1000 个字符的字符串开始:

var oneThousand = 
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789" +
    "01234567890123456789012345678901234567890123456789";
var array = [];
_.each(oneThousand, function(e, i) {
  array[i] = i + 1;
});
snippet.log(array.length);
snippet.log(array.join(", "));
<script src="http://underscorejs.org/underscore-min.js"></script>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

...但我确定这是作弊。

【讨论】:

  • 你用这段代码让我大吃一惊!我知道这是一个基本问题,但我没有想到使用递归,所以谢谢你的建议!
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 2011-12-06
  • 2013-02-28
  • 1970-01-01
  • 2011-10-11
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多