如何使此功能更有效?

时间:2014-10-07 23:35:01

标签: javascript angularjs

我有信用卡类型的数据结构。

让hasTransFee更有效率会更好。如果我开始在这个列表中添加商店卡等,它可能会变得非常大,所以工作得越快越好。

有人有任何建议吗?

$scope.creditCards = [
    { name: 'VISA DEBIT/DELTA', value: 'DEL', transactionFee: false},
    { name: 'VISA CREDIT', value: 'VIS', transactionFee: true },
    { name: 'MASTERCARD CREDIT', value: 'MSC', transactionFee: true },
    { name: 'MASTERCARD DEBIT', value: 'MCD', transactionFee: false },
    { name: 'MAESTRO', value: 'MAE', transactionFee: false },
    { name: 'SWITCH', value: 'SWI', transactionFee: false },
    { name: 'VISA ELECTRON', value: 'ELC', transactionFee: false },
    { name: 'SOLO', value: 'SOL', transactionFee: false }
  ];


var hasTransFee = function(cardType) 
{
 for (var i=0; i < $scope.creditCards.length; i++) {
    if($scope.creditCards[i].value==cardType && $scope.creditCards[i].transactionFee == true){
     return true;   
    }
  }
  return false;
}

2 个答案:

答案 0 :(得分:4)

似乎value是唯一标识符,如果是这种情况,您可以将“信用卡”存储在object中,如下所示:

$scope.creditCards = {
    'DEL': { name: 'VISA DEBIT/DELTA', transactionFee: false},
    'VIS': { name: 'VISA CREDIT', transactionFee: true },
    'MSC': { name: 'MASTERCARD CREDIT', transactionFee: true }
  };

然后你甚至不需要一个函数来检查信用卡是否有transactionFee,如果你还想要一个函数,那个函数看起来像这样:

var hasTransFee = function(cardType){
  return $scope.creditCards[cardType].transactionFee;
}

答案 1 :(得分:-1)

旁注:这更适合CodeReview

试试这个:

var hasTransFee = function(cardType)
{
    var thecard;
    $scope.creditCards.some(function(item) {
        return item.value == cardType && (thecard = item);
    });
    return thecard && thecard.transactionFee;
};

这只会根据需要进行迭代,以便找到具有正确类型的卡,并且不再进一步(如果找到卡但是没有费用,您的原始代码将继续扫描整个阵列。)< / p>

重要提示=只有一个&& thecard = item登录。故意是作业,是最终return工作所必需的。