如何 return 具有一个由字符串参数定义的字段的数组

How to return array with one field defined by a string argument

我有一个 return 数组的函数,如何使用参数定义 return 数组中其中一列的名称?

假设我想要在 myFieldName 参数中传递名称的字段而不是字段 'qty'。

var results = _.map(
    _.where(data, {
        UNDERLYING: product
    }),
    function (r) {
        if (r["QUANTITY"] != 0 && !isInArray(Date.parse(r["REPORT_DATE"]), errorDates)) {
            return {
                dt: Date.parse(r["REPORT_DATE"]),
                qty: (r["QUANTITY"] * multiplier)
            };
        }
    }
);

您不能使用变量名在对象字面量中定义 属性。因此,您可能必须创建一个对象并向其添加属性,就像这样

var obj = {};
obj["dt"] = Date.parse(r["REPORT_DATE"]);
obj[myFieldName] = r["QUANTITY"] * multiplier;
return obj;

如果您知道一些已经存在的属性,那么您可以在对象字面量本身中定义它们,就像这样

var obj = {
    dt: Date.parse(r["REPORT_DATE"])
};
obj[myFieldName] = r["QUANTITY"] * multiplier;
return obj;

如果你在支持ECMAScript-6's Computed Property names的环境中,那么你可以简单地做

return {
    dt: Date.parse(r["REPORT_DATE"]),
    [myFieldName] : r["QUANTITY"] * multiplier
}

您可以在创建对象后分配新的或现有的属性:

let foo = {bar: 1};
foo.baz = 2;

要使用动态名称做到这一点,您需要使用方括号访问器,例如:

function assign(obj, field, value) {
    obj[field] = value;
}

在你的情况下,你会做类似的事情:

function getQuantity(data, field) {
  var results = _.map(
    _.where(data, {
      UNDERLYING: product
    }),
    function(r) {
      if (r["QUANTITY"] != 0 && !isInArray(Date.parse(r["REPORT_DATE"]), errorDates)) {
        var returnValue = {
          dt: Date.parse(r["REPORT_DATE"])
        };
        returnValue[field] = r["QUANTITY"] * multiplier;
        return returnValue;
      }
    }
  );
  return results;
}