相关疑难解决方法(0)

迭代范围的功能方式(ES6/7)

以更多功能方式执行以下操作的最佳方法是什么(使用ES6/ES7)

let cols = [];
for (let i =0; i <= 7; i++) {
   cols.push(i * i);
}
return cols;
Run Code Online (Sandbox Code Playgroud)

我试过,

return [ ...7 ].map(i => {
  return i * i;
});
Run Code Online (Sandbox Code Playgroud)

但那转化为

[].concat(7).map(function (n) {
  return n * n;
});
Run Code Online (Sandbox Code Playgroud)

这不是我的预期.

编辑:

@pavlo.的确,这是一个错误.我正在使用JSX,例如,我想要7个div,(未经测试)

let cols = [];
    for (let i =0; i <= 7; i++) {
       cols.push(<div id={i}> ...  </div>)
    }
    return cols;
Run Code Online (Sandbox Code Playgroud)

所以这个想法确实是为了减少临时变量和程序感觉的数量.

javascript functional-programming ecmascript-harmony ecmascript-6

108
推荐指数
3
解决办法
7万
查看次数

如何仅在ES2015中生成从0到n的数字范围?

我一直发现rangeJavaScript中缺少函数,因为它在python和其他版本中可用?有没有简洁的方法来生成ES2015中的数字范围?

编辑:我的问题与提到的副本不同,因为它特定于ES2015而不是ECMASCRIPT-5.此外,我需要范围从0开始而不是特定的起始编号(尽管如果那样会很好)

javascript arrays ecmascript-6

97
推荐指数
8
解决办法
8万
查看次数

ES6尾递归优化堆栈溢出

阅读了Rauschmayer博士对es6中递归尾调用优化的描述之后,我一直试图重新创建他详细说明的递归因子函数的"零堆栈"执行.

使用Chrome调试器在堆栈帧之间切换,我发现尾部优化没有发生,并且正在为每次递归创建堆栈帧.

我也尝试通过在没有调试器的情况下调用函数来测试优化,而是传递100000给阶乘函数.这会引发"最大堆栈"错误,这意味着它实际上并未进行优化.

这是我的代码:

const factorial = (n, acc = 1) => n <= 1 ? acc : factorial(n - 1, n * acc)
console.log( factorial(100000) )
Run Code Online (Sandbox Code Playgroud)

结果:

Uncaught RangeError: Maximum call stack size exceeded
Run Code Online (Sandbox Code Playgroud)

javascript stack-overflow optimization recursion ecmascript-6

32
推荐指数
2
解决办法
7413
查看次数

是否有一种在JavaScript ES6中初始化数组的功能方法?

我终于放弃并编写了一个for循环来初始化一个简单的对象数组,其中每个对象都有一个递增的counter(id)作为对象的属性.换句话说,我只想要:

var sampleData = [{id: 1},{id: 2},...];
Run Code Online (Sandbox Code Playgroud)

我希望有一个紧凑的语法,我可以把它放在我的返回语句上.

let sampleData = [];
for (var p = 0; p < 25; p++){
    sampleData.push({id: p});
}

return {
    data: sampleData,
    isLoading: true
};
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming ecmascript-6

28
推荐指数
4
解决办法
5229
查看次数

在JavaScript中将数组迭代为一对(当前,下一个)

Python中将列表迭代为对(当前,下一个)的问题中,OP有兴趣将Python列表迭代为一系列current, next对.我有同样的问题,但我想用最干净的方式在JavaScript中完成,也许使用lodash.

使用简单的for循环很容易做到这一点,但它感觉不是很优雅.

for (var i = 0; i < arr.length - 1; i++) {
  var currentElement = arr[i];
  var nextElement = arr[i + 1];
}
Run Code Online (Sandbox Code Playgroud)

Lodash几乎可以做到这一点:

_.forEach(_.zip(arr, _.rest(arr)), function(tuple) {
  var currentElement = tuple[0];
  var nextElement = tuple[1];
})
Run Code Online (Sandbox Code Playgroud)

在最后一次迭代中,这nextElement将是一个微妙的问题undefined.

当然,理想的解决方案只是一个pairwise只在必要时循环的lodash功能.

_.pairwise(arr, function(current, next) {
  // do stuff 
});
Run Code Online (Sandbox Code Playgroud)

是否有任何现有的库已经这样做了?或者是否有另一种很好的方法在JavaScript中进行成对迭代我还没有尝试过?


澄清:如果arr = [1, 2, 3, 4],那么我的pairwise函数将迭代如下:[1, 2], …

javascript iteration lodash

14
推荐指数
5
解决办法
8648
查看次数

在高阶函数中传递其他参数

考虑这个例子:

const samples = ["foo", "bar"];

const excludeFoos = function(item) {
  return item !== "foo";
}

const foos = samples.filter(excludeFoos);
Run Code Online (Sandbox Code Playgroud)

如何传递其他参数excludeFoos

例如:

const samples = ["foo", "bar"];

const exclude = function(item, str) {
  return item !== str;
}

// obviously won't work but you get the point
const foos = samples.filter(exclude("foo"));
console.log(foos); // ["bar"]
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming ecmascript-6

10
推荐指数
2
解决办法
3664
查看次数