在這里,我是 JavaScript 的新手。我在解決問題;但是,我在理解將多個方法鏈接在一起時遇到了問題。我一直在試圖理解這個解決方案,但花了我很多時間,我仍然沒有明白。
我知道我將根據我選擇的特定功能輸入我需要更改的陣列。我了解所有方法功能,但我不了解它們的語法,所以有人可以向我解釋每一步嗎?
const group_By = (arr, fn) =>
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => {
acc[val] = (acc[val] || []).concat(arr[i]);
return acc;
}, {});
uj5u.com熱心網友回復:
用盡可能少的話。
首先他們計算一個三元運算式,在這里他們檢查輸入是否是一個函式,如果是,他們按原樣傳遞它,否則他們創建一個匿名函式來嘗試訪問給定的屬性。冒號后面的箭頭函式看起來有點混亂,但它仍然只是一個函式。它接受一個名為 的引數val,并回傳 fn 變數內的鍵屬性。
typeof fn === 'function' ? fn : val => val[fn]
下一步是為每個元素創建一個具有新值的新陣列。此步驟的輸出只是用于對元素進行分組的值串列。例如在陣列["a", "bb"]上呼叫它fn='length'會回傳[1,2]
arr.map(typeof fn === 'function' ? fn : val => val[fn])
然后他們呼叫.reduce輸出陣列上的函式。reduce 函式的目的是從慢慢迭代它的所有元素中創建一個值。您可以看出最后一步回傳了累加器值,并且它作為第一個引數傳遞給在下一個元素上呼叫的函式。最后的空物件只是累加器的初始值。
.reduce((acc, val, i) => {
...
return acc;
}, {});
最后是進行累積的步驟。這里首先val來自映射的結果,用于訪問新創建物件的屬性。如果該值不存在,則用空陣列替換|| []。它具有連接到其上的相同索引處的初始陣列的元素。如果有一些元素,它只會向其中添加新元素并重新分配值。
acc[val] = (acc[val] || []).concat(arr[i]);
uj5u.com熱心網友回復:
好的,我從您的查詢中了解到您正在嘗試將多個功能鏈接在一起。
function Chained() {
// this reference.
const _this_ = this
this.Function1 = () => // do something and return _this_
this.Function2 = () => // do something here and return _this_
}
在上面你可以看到鏈是一個簡單的物件,它回傳“this”作為背景關系。在背景關系中,我們已經有了 Function1 和 Function2。因此,以下內容將有效。
const _ExecuteChained = new Chained()
// Now you can run _ExecuteChained.Function1().Function2() and so on.
現在來看看你的代碼。
const group_By = (arr, fn) =>
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val,
i) => {
acc[val] = (acc[val] || []).concat(arr[i]);
return acc;
}, {});
Here you are just running loop on "arr" and validating if second param is
function or not if function than return it as is ( Since you are using map
it will be stored at given index. else just get value of function at given key and return it.
# Reduce.
in Reduce you are trying to accumulate given value with (conact or merge or extend) value at given index of "arr" in this case function.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341329.html
標籤:javascript 前端
