使用 LoDash 操作 JSON

Manipulating JSON with LoDash

我刚开始使用 Lodash,我正在尝试对数组中的任何值(在最低级别)进行平均。无论我尝试什么,原来的 JSON 仍然存在。

我需要构建一个全新的对象并将所有内容都放入其中吗?为什么我不能像操作数组一样简单地操作它?

function averageIt(mtcs) {

function jsonAvg(dataSet) {

  function avg(elmt) {
    var sum = 0;
    for( var i = 0; elmt[i]; i++ ){
        sum += parseInt( elmt[i], 10 );
    }
    return Math.round(sum/elmt.length * 100) / 100;
  }

  _.forEach(dataSet.json, function(day) {
    _.mapValues(day, function(n) {
      return _.isArray(n) ? avg(n) : n;
    });
  });

  console.log("JSON Averaged:", dataSet.json);

  return dataSet;
}

_.forIn(mtcs.dataSets, function(set) {
  set = jsonAvg(set);
});

console.log("Averaged Metrics:", mtcs);

return mtcs;
}

问候 - - - 真糊涂"Programmer"

如果我没理解错的话,当你使用 _.mapValues 时,就是应用 avg 函数的地方。但是当您使用地图函数时,您在 return 中设置的结果不会存储在任何地方,并且 dataSet.json 保持不变。你可以这样做:

_.each(dataSet.json, function(day, index) {
  dataSet.json[index] = _.mapValues(day, function(n) {
    return _.isArray(n) ? avg(n) : n;
  });
});

假设dataSet.json是一个数组。如果它是一个对象,则不应对其应用 each,而应执行类似 Object.keys(dataSet.json) 的操作以将其属性转换为数组。