如何在对象中迭代和格式化值,同时又将其作为对象返回?

时间:2018-12-19 20:38:25

标签: javascript

所以我有一个像这样的对象:

const maxValues = {
  flexMaxSeatYear: 16270,
  flexMaxTotalCost: 8879809,
  flexMaxTotalNPV: 7026931,
  tradMaxSeatYear: 12979,
  tradMaxTotalCost: 6684694,
  tradMaxTotalNPV: 5504844,
}

并且我有一个将这些对象值格式化为字符串的函数,它将输出如下内容:

const maxValues = {
  flexMaxSeatYear: '16270',
  flexMaxTotalCost: '8879809',
  flexMaxTotalNPV: '7026931',
  tradMaxSeatYear: '12979',
  tradMaxTotalCost: '6684694',
  tradMaxTotalNPV: '5504844',
}

我尝试过的事情

我可以将这些数字设置为以下格式:

Object.values(maxValues).map(values => values.toLocaleString('en')
// ['16270', '8879809', '7026931' ....]

但这仅返回仅包含值的数组。有没有一种方法可以帮助返回具有已调整值但带有键的对象?谢谢。

3 个答案:

答案 0 :(得分:6)

您可以将Object.entries()Array.reduce()结合使用来获取对象:

const maxValues = {"flexMaxSeatYear":16270,"flexMaxTotalCost":8879809,"flexMaxTotalNPV":7026931,"tradMaxSeatYear":12979,"tradMaxTotalCost":6684694,"tradMaxTotalNPV":5504844};

const result = Object.entries(maxValues).reduce((r, [k, v]) => ({
  ...r,
  [k]: v.toLocaleString('en')
}), {});

console.log(result);

答案 1 :(得分:4)

您可以映射新对象并​​将其分配给单个对象。

var maxValues = {
  flexMaxSeatYear: 16270,
  flexMaxTotalCost: 8879809,
  flexMaxTotalNPV: 7026931,
  tradMaxSeatYear: 12979,
  tradMaxTotalCost: 6684694,
  tradMaxTotalNPV: 5504844,
}

maxValues = Object.assign(
    ...Object
        .entries(maxValues)
        .map(([k, v]) => ({ [k]: v.toLocaleString('en') }))
);

console.log(maxValues);

答案 2 :(得分:2)

如果您不需要保留原始文档,则可以遍历并变异 maxValues 对象。这不需要创建键值对的数组,例如 Object.entries()或其他类似方法,因此对于大型数据集,它应该更快一些。但是,这仅在不需要保留原始未突变的情况下才重要。

例如:

  const maxValues = {
  flexMaxSeatYearYear:16270,
  flexMaxTotalCost:8879809,
  flexMaxTotalNPV:7026931,
  tradMaxSeatYearYear:12979,
  tradMaxTotalCost:6684694,
  tradMaxTotalNPV:5504844,
}

for(在maxValues中设为k){
  maxValues [k] = maxValues [k] .toLocaleString();
}

console.log(maxValues);