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 参数。我们是否需要检查所有三个参数的未定义?

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 回答