如何解决我怎样才能用多维数组计算这个平均值?
我需要计算这种平均值:
stars = [["3","ciccio"];["5","ciccio"];["1","ciccio"];["2","caramella"]]
我想要的是:
avrgArr = [[3,ciccio];[2,caramella]]
我的代码是:
var moon = stars.length-1;
for (var y = 0; y < stars.length; y++) {
avrg= parseInt(stars[y][0]);
for (var z = 1; z < moon; z++) {
if (stars[y][1] === stars[z][1]) {
avrg+= parseInt(stars[z][0]);
count++;
}
}
avrg= avrg/ count;
avrgArr.push([avrg,stars[y][1]]);
}
但是这段代码给了我每个元素的平均值,比如:
avrgArr = [[3.75,ciccio];[2.125,ciccio];[1.0833333333,ciccio];[0.8125,ciccio];[0.85,ciccio];[0.1 caramella]]
我该如何解决这个问题?谢谢:)
解决方法
首先,使用 O(n) 遍历数据生成一个对象,该对象以名称为键,以每个名称的总和和计数为值:
function loadMarketRuleDetails(){
var url = "/EPSWeb/sda/getBidderEliminationRuleDetailsAction.do?operation=MARKET_RULE_DETAILS&ruleId="+$('#ruleId').val()+"&auctionNoticeId="+$('#auctionNoticeId').val();
marketRuleDetails = fetchGetJsonData(url,false);
var html = "";
alert(marketRuleDetails.length +"--"+marketRuleDetails[1].ruleInputValueStr.noOfPredicates );
}
}
此时您将拥有:
const stars = [["3","ciccio"],["5",["1",["2","caramella"]];
// helper function for reduce
const sum = (data,[value,name]) => {
value = parseInt(value,10);
// create empty entry if none found
data[name] = data[name] || { count: 0,sum: 0 };
// accumulate data
data[name].count += 1;
data[name].sum += value;
return data;
}
const aggregates = stars.reduce(sum,{});
此对象按原样非常有用,但如果您绝对需要问题中定义的数组结构,则可以将此对象转换为该结构,并通过另一个 O(m) 传递中间结果:
{ ciccio: { count: 5,sum: 15 },caramella: { count: 1,sum: 2 } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。