我試圖了解 filter() 和 includes() 如何在 javascript 中處理陣列,但英語不是我的母語,所以如果有人能像我 5 歲一樣向我解釋下面的示例,我將不勝感激:
const removeFromArray = function(...num) {
let array = num[0];
return array.filter(val => !num.includes(val))
};
此函式接受一個陣列和一些其他引數,然后從該陣列中洗掉其他引數,例如 removeFromArray([1, 2, 3, 4], 3) 應該洗掉 3 并回傳 [1,2,4]
這部分是如何作業的?
return array.filter(val => !num.includes(val))
為什么使用感嘆號以及這兩種方法如何協同作業?
uj5u.com熱心網友回復:
休息引數不應該這樣使用,它應該只用于類似的值。因此,應該單獨接受該陣列,并且只應使用 rest 接受要洗掉的數字(請參閱下面的代碼段)。
includes()方法確定陣列是否在其條目中包含某個值,并根據需要回傳 true 或 false 。
因此,我們只需過濾掉陣列中不存在的數字itemsToRemove。
const removeFromArray = (array, ...itemsToRemove) =>
array.filter((item) => !itemsToRemove.includes(item));
removeFromArray([1, 2, 3, 4], 3, 2);
uj5u.com熱心網友回復:
!意思是“不”。如果something為假(null,0,假,空字串),則!something回傳true. 這導致了一個看起來非常奇怪的“作弊代碼”,您可以在其中將任何值轉換為布林值(即真值true和假值false)!!value。一個感嘆號將其轉換為一個布林值,true如果value它是虛假的,那么第二個感嘆號將true變為false(或false變為true)!
array.prototype.filter 需要針對每個元素評估一個函式,并回傳一個僅包含所提供函式回傳真值的元素的陣列。
可能更容易想到以下與您的代碼幾乎等效的代碼...
const removeFromArray = function(array, ...valsToRemove) {
const isValToKeep = val => array.includes(val) === false;
return array.filter(isValToKeep)
};
除了更長之外,這段代碼的唯一區別是不會在第一個引數中查找第一個引數。考慮
const a1 = [1,2,3];
a1.push(a1); // appends itself as its last element
在您的版本中,removeFromArray(a1, 2)將 return [1, 3],但我的沒有將第一個引數作為要從第一個引數中查找和洗掉的元素之一,這可能是大多數人所期望的并且性能更高,但肯定會有不同回傳示例中的效果[1, 3, a1],即[1, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [...]]]]]]]]
uj5u.com熱心網友回復:
這是一個簡單的表格來解釋如何使用過濾器
function isBigEnough(value) {
return value >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// result is [12, 130, 44]
這個例子來自:https ://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
uj5u.com熱心網友回復:
讓我們從重寫這一行開始:
前
return array.filter(val => !num.includes(val))
后
const callback = val => {
return !num.includes(val)
}
const filteredArray = array.filter(callback);
return filteredArray
現在讓我們打破并解釋一下這個陳述句的部分內容:
! num.includes(val)
includes這里的方法將檢查 num 是否val在其中。如果 num 有 val,它將回傳 true,否則將回傳 false。請注意!行首的 ,這會將包含回傳的值更改為相反的值,例如,如果回傳的值為 false,則將其更改為 true,如果回傳的值為 true,則將其更改為 false。
array.filter(callback)
這里的filter方法將遍歷陣列的每個元素,并在每個元素處詢問是否filteredArray根據回呼回傳的內容將該元素添加到 中。如果回呼回傳 true(truthy),它將添加它,否則它不會添加它。回呼應該只回傳 true(truthy) 或 false(falsy)。
示例:在陣列的索引 0 處,filter將詢問回呼是否回傳 true,如果它回傳 true,則索引 0 處的元素將被添加到過濾后的陣列中。它將對其余元素執行相同的操作。
他們如何協同作業:
array有 [1,2,3,4] 所以array.filter(callback)會遍歷每個元素并在每個元素上呼叫回呼。根據您的函式num,[[1,2,3,4],3]因此當陣列中的 val 為 3!num.includes(val)時將回傳 true 但這!會將其更改為 false,因為結果回呼將回傳 false 并且 3 不會包含在最終陣列中filteredArray。
希望5歲的孩子能理解這個解釋。您現在可以像這樣重寫您的函式:
const removeFromArray = (array, ...numbersToRemove) => array.filter((number) => !numsToRemove.includes(number));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490014.html
標籤:javascript 数组
下一篇:如何修復警報邏輯的空值?
