使用LoDash操作JSON

时间:2015-03-21 19:21:38

标签: javascript json underscore.js 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;
}

此致 - - - 真的很困惑“程序员”

1 个答案:

答案 0 :(得分:0)

如果我理解正确,当您使用_.mapValues时,应用avg功能。但是当您使用map函数时,您在返回中设置的结果不会存储在任何位置,并且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)之类的操作将其属性转换为数组。