使用 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)
的操作以将其属性转换为数组。
我刚开始使用 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)
的操作以将其属性转换为数组。