我正在從我繼承的一些代碼中洗掉 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寫它?
uj5u.com熱心網友回復:
Array.from()使用JS將物件轉換為標準陣列Array.forEach():
const iterate = (fn, o) => Array.from(o).forEach(fn)
iterate(function(li) {
// Other code
}, lis);
uj5u.com熱心網友回復:
當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/[email protected]/dist/ramda.min.js"></script>
這很容易用 with 替換為 vanilla Array.fromJavaScript Array.forEach():
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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/476977.html
上一篇:按嵌套物件值對陣列進行排序
下一篇:對字串進行條件評估
