繁体   English   中英

如何在 vanilla JS 中重写这个 ramda.js 代码

[英]How to rewrite this ramda.js code in vanilla JS

我正在从我继承的一些代码中删除 ramda,以减少 JavaScript 大小。 但我坚持以下,因为这条线真的让我感到困惑,因为它显然不对任何对象起作用。

var iterate = R.addIndex(R.forEach);

相关代码如下所示:

var lis = $(el).find("ul.navbar-nav:not(.navbar-right) > li:not(.nav-more)");

var iterate = R.addIndex(R.forEach);

iterate(function(li) {
    // Other code

}, lis);

我怎样才能用香草JS写它?

R.addIndex()应用于R.forEach()时,它会创建一个函数,该函数简单地迭代项目并为每个项目分配一个从零开始的索引:

 var lis = ["a", "b", "c"]; var iterate = R.addIndex(R.forEach); iterate(function(li, index) { console.log(li, index) }, lis);
 <script src="//cdn.jsdelivr.net/npm/ramda@0.25.0/dist/ramda.min.js"></script>

这很容易用Array.fromArray.forEach()替换为 vanilla JavaScript:

 var lis = ["a", "b", "c"]; var iterate = (fn, list) => Array.from(list) .forEach(fn); iterate(function(li, index) { console.log(li, index); }, lis);

如果Array.from()不可用并且需要 ES5 解决方案,则可以使用Array.prototype.slice()转换为数组:

 var lis = ["a", "b", "c"]; var iterate = function(fn, list) { Array.prototype.slice.call(list) .forEach(fn); } iterate(function(li, index) { console.log(li, index); }, lis);

最后,可以转换为适用于任何类似数组的简单for循环

 var lis = ["a", "b", "c"]; var iterate = function(fn, list) { for (var i = 0; i < list.length; i++) fn(list[i], i); } iterate(function(li, index) { console.log(li, index); }, lis);

使用Array.from()将对象转换为标准数组,然后使用 JS Array.forEach()

const iterate = (fn, o) => Array.from(o).forEach(fn)

iterate(function(li) {
  // Other code   
}, lis);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM