我刚刚开始使用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;
}
此致 - - - 真的很困惑“程序员”
答案 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)
之类的操作将其属性转换为数组。