var data = [1, 2, 3, 5, 2, 1, 4];
// iterate over elements and filter
var res = data.filter(function (v) {
// get the count of the current element in array
// and filter based on the count
return data.filter(function (v1) {
// compare with current element
return v1 == v;
// check length
}).length == 1;
});
console.log(res);
我理解這段代碼中的所有行,但我不明白它如何檢測length==1.
(My opinion) 因為它回圈遍歷陣列中的每個元素,并且return boolean value無論是真還是假,所以它如何用于檢測長度?
這段代碼是獲取陣列中只出現一次的陣列元素。
uj5u.com熱心網友回復:
return true 不是回傳布林值,但是當您從過濾器內部回傳 true 時,該專案將添加到過濾器函式的結果陣列中。
這里的程序稱為方法鏈。在第 11 行,首先將過濾器應用于資料陣列,然后將 .length 方法應用于過濾器的結果,這將是一個長度等于或小于資料陣列中元素數量的陣列。然后最后只有一次 return 被呼叫,這將是一個用于外部過濾器的布林值。
另一個例子:
function reverseString (inputString) {
return inputString.split("").reverse().join()
}
在上面的示例中,函式在拆分后回傳,然后在拆分結果上反轉,然后在反轉結果上連接。僅回傳最終結果字串。
uj5u.com熱心網友回復:
不要將其視為代碼行。將每一段代碼拆分成真正的含義my padawan
data.filter(function (v1) {
// compare with current element
return v1 == v;
// check length
})
過濾資料陣列以回傳一個元素陣列,data其中每個元素都等于v
通過檢查其長度是否為 1,如果陣列只有 1 個元素,您希望回傳 true。
所以,
var res = data.filter(function (v) {
// return true if there is only 1 element in data which is equal to v
});
這基本上意味著,我們正在過濾data,并回傳一個新陣列,其中每個元素都使得它在陣列中只出現一次。
uj5u.com熱心網友回復:
for 的函式filter回傳一個布林值,但filter它本身回傳一個陣列。
因此,例如:
array.filter(function(element) { return element >= 0; });
表示該函式function(element) { return element >= 0; }將應用于array. 然后,如果函式的結果是true,則該元素將存在于array(filter函式回傳的內容)的最終過濾版本中,如果結果是 ,則該元素將不存在false。
實際上,所有來自的負數array都將被過濾掉,因為它們回傳false.
您的代碼是這樣說的:對于 中的每個元素data,過濾data以僅保留與當前元素相等的元素。如果這個過濾后的串列只有一個元素,那么它只能是我們當前的元素。因此這個元素只存在一次,應該保留在最終結果中,所以我們回傳trueif .length == 1。最后,一旦對每個元素都完成了此操作,filter它就足夠聰明地將這些結果轉換為產生的元素的陣列,true而忽略那些產生.falsetruefalse
uj5u.com熱心網友回復:
我將逐步詳細描述過濾方法。首先,它需要一個條件。然后它回傳一個包含所有成功通過條件的值的陣列
所以把這段代碼當作一個條件
return data.filter(function (v1) {
// compare with current element
return v1 == v;
// check length
}).length == 1;
所以讓我們來看看條件的第一部分
data.filter(function (v1) {
// compare with current element
return v1 == v;
// check length
})
假設我們將從第一個元素開始1,那么有多少次v1 === v?答案是兩次,所以它會回傳這個陣列[1, 1]
所以忘記我們在第一行中寫的條件,然后這樣想[1,1].length === 1。所以[1,1].length === 1會回來false
number 也會發生同樣的情況2。所以讓我們談談數字3。它將[3].length === 1是true哪個將進入上層,這就是為什么res最終會[3, 5, 4]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486787.html
標籤:javascript
上一篇:不使用比例縮放影像
下一篇:串列項未自行調整到選單底部
