ES6是否可以对功能范式中的Set进行本征编码?

问题描述 投票:0回答:1

我想在JavaScript中的Set(0..n)上创建置换。

我在Array方法上苦苦挣扎:其中有些像map返回一个可以进一步修改的新数组,有些像forEach则没有。要编码排列,我只能通过增强Array原型来做到这一点:

Object.defineProperty(Array.prototype, "chain", {
  value: function(method, arg) {
    this[method].call(this, arg);
    return this;
  }
});

Object.defineProperty(Array.prototype, "value", {
  value: value => value // to value value ;-)
});

只有那时我才能够编码排列:

let perm = (n) =>
  n==0 ? [[0]] :
  perm(n-1).reduce((acc, cur) =>
    cur.chain("forEach", (_, i) =>
      acc.chain("push", [...cur.slice(0,i), n, ...cur.slice(i)])
    ).value(acc).chain("push", [...cur,n])
  ,[])

测试:

console.log(perm(2));

因此,在ES6中(不添加到Array原型中)以纯功能方式对Set(或任何类似Array的对象)上的排列进行编码是可行的吗?

[我不想强奸Javascript(就像jQuery当时那样),以强制它采用一些非本地的范例,但我想充分了解其在功能领域的潜力。

javascript arrays ecmascript-6 functional-programming permutation
1个回答
0
投票

根本不需要ES6。如果要以函数样式编程,则不要使用forEachpush-将其隐藏在chain方法中,以便您可以编写具有有用返回值的表达式无济于事。

© www.soinside.com 2019 - 2024. All rights reserved.