我正在嘗試創建一個函式來使用 OR/AND 邏輯運算子過濾一些資料,具體取決于用戶選擇的內容。這意味著我需要使用 Array.prototype.every (AND) 或 Array.property,some (OR) 來滿足我的要求。
為了避免代碼冗余,我試圖做這樣的事情:
const functionApplied = condition === 'ALL'
? myArray.every
: myArray.some;
functionApplied(item => {
... aux code ...
})
functionApplied.call(item => {
... aux code ...
})
有沒有類似的方法可以做到這一點?
我知道我可以做這樣的事情,但我只是對上面的 sintax 感到好奇......
const auxFunction = (item) => {...};
if (condition === 'ALL') {
myArray.every(item => auxFunction(item));
} else {
myArray.some(item => auxFunction(item));
}
uj5u.com熱心網友回復:
你絕對可以做一些類似于你希望達到的事情。這是一種方法:
function checkCondition(condition, booleanFunc, myArray) {
const functionApplied = condition === 'ALL'
? myArray.every.bind(myArray)
: myArray.some.bind(myArray);
return functionApplied(booleanFunc);
}
console.log(checkCondition('ANY', (item) => {return item > 2}, [1,4,5,6]));
console.log(checkCondition('ANY', (item) => {return item > 2}, [4,5,6]));
console.log(checkCondition('ANY', (item) => {return item > 2}, [1,2]));
console.log(checkCondition('ALL', (item) => {return item > 2}, [1,4,5,6]));
console.log(checkCondition('ALL', (item) => {return item > 2}, [4,5,6]));
VLAZ 評論是另一個好的方向。
uj5u.com熱心網友回復:
是的,VLAZ 評論是我想要的方式,這有效:
const functionApplied = condition === 'ALL'
? Array.prototype.every
: Array.prototype.some;
functionApplied.call(myArray, item => {
... aux code
謝謝大家的快速回答:)
uj5u.com熱心網友回復:
const result = (myArray[condition === 'ALL' ? 'every': 'some'])(item => auxFunction(item))
uj5u.com熱心網友回復:
我個人會使用以下內容:
const fn = condition === 'ALL' ? "every" : "some";
const result = myArray[fn]((item) => {
// ... aux code ...
});
存盤函式名稱every或some名為fn. 然后呼叫它提供您的輔助代碼。
uj5u.com熱心網友回復:
您可以使用保存屬性名稱的變數,然后使用動態屬性訪問。
function functionApplied(condition) {
return functionApplied === 'ALL' ? 'every' : 'some';
}
let result = myArray[functionApplied(condition)](item => { ... });
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473554.html
標籤:javascript 数组
