0

オブジェクトリテラルで呼び出すことができる関数を作成するために、jsコードスニペットに取り組んでいます。

問題領域:製品の値を追跡する必要がない場合は、未定義のチェックが行われます。しかし、オブジェクトリテラルに値がない場合は、すべての値をチェックする必要がありますか?以下はコードです。

trackProduct = function (args) {

      if(args.label == undefined) {
        value.push([args.category, args.action, args.value]);
      } else if(args.value == undefined){
        value.push([args.category, args.action, args.label]);
      } else {
        value.push([args.category, args.action, args.label, args.value]);
      }
};

以下のオブジェクトリテラルを介してこの関数を呼び出します。valueパラメータを渡していません。3つのパラメーターすべてについてUndefinedをチェックする必要がありますか?

trackProduct({
    category: elemcategory,
    action: elemaction,
    label: elemlabel
});

このコードを改善する方法に関する提案。

4

1 に答える 1

0

次のようなものを試すことができます:

trackProduct = function (args) {
    var tempArray = [];

    args.category && tempArray.push(args.category);
    args.action && tempArray.push(args.action);
    args.label && tempArray.push(args.label);
    args.value && tempArray.push(args.value);

    value.push(tempArray); // [["elemcategory", "elemaction", "elemlabel"]]
};

また、@jisi が指摘したように、これらのいずれかが 0 などの偽の値を保持できる場合、この単純な条件は成立しません。その場合、typeof(args.category) === 'undefined'使用する必要があります。

可読性に問題がなく、コードを読む人がこれを理解できると確信していない限り、私もお勧めしません。

上記の例は、未定義の値の処理を示しています。


オブジェクトの反復は、for in で実行できます。

var tempArray = [];
for (var prop in args) tempArray.push(args[prop]);
value.push(tempArray);
于 2012-11-21T10:34:15.983 に答える