簡體   English   中英

檢查是否使用了參數

[英]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)來查看對象是否在數組中。

您也可以使用ObjectMap 不幸的是,瀏覽器仍然不支持Map但是先前鏈接的答案將向您展示如何自己實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM