[英]Check if argument has been used
我想知道最好的方法是檢查函數中是否已調用參數。
我想做的Sudo代碼:
function returnArg(arg){
if(argHasbeenCalled){
return "foo";
}
else{
return arg;
}
}
我的解決方案是:
var myArray = [];
function returnFoo(arg){
if(jQuery.inArray(arg, myArray) < 1){
return "Foo";
}
else {
return "bar";
}
newArray.push(arg);
}
在將參數存儲在數組中之前,您的代碼將返回。
除非您單擊else分支,否則無需將參數存儲在數組中。 所以考慮這樣的事情:
var myArray = [];
function returnFoo(arg)
{
if (jQuery.inArray(arg, myArray) === -1)
{
return "Foo";
}
else
{
myArray.push(arg);
return "bar";
}
}
一個簡單的解決方案是:
// generic helper function
function rememberCalls(fn) {
var calledArgs = {};
return function(arg) {
if (!(arg in calledArgs)) {
calledArgs[arg] = fn(arg);
}
return calledArgs[arg];
}
}
// example
var addQuestionMark = rememberCalls(function(str) {
return str + '?';
});
addQuestionMark('What is your name'); // the function will be called
addQuestionMark('What is your name'); // the function will be skipped
我認為您想要的就是記憶 。 如果您只想知道是否對參數進行過處理,這與您對結果不感興趣的東西完全不一樣,但是您可以使用類似的方法。
var myFn = (function (processedArgs) {
return function (arg) {
if (processedArgs[arg]) {
console.log('already processed');
//do something
return;
}
console.log('not processed');
//do something
processedArgs[arg] = true;
};
})({});
myFn(1); //not processed
myFn(1); //already processed
但是,如果arg
是一個對象,則必須使用該對象的某些屬性,使其使其唯一以生成密鑰。 如果不可能,則可以將它們存儲在數組中,而不是將對象用作映射,並使用array.indexOf(arg)
來查看對象是否在數組中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.