我想使用 Javascript 的 lodash 将这个数组对象转换为百分比。这是对象:
gender = {
female: [14, 33, 28, 49],
male: [33, 50, 42, 61]
}
我希望上面的对象是
genderPercent = {
female: [0.2978, 0.3975, ..., ...],
male: [0.7021, 0.6024, ..., ...]
}
这是我已经尝试过的:
_.map(gender, function (val, index, list) {
gender["male"][gender["male"].length-1] / gender["male"][gender["male"].length-1] + gender["female"][gender["female"].length-1])
});
但这似乎行不通。
有什么建议吗? :)
(注意:我需要随时间扩展的解决方案,因为我的性别数组每个月都在持续增长。)
最佳答案
如果男性和女性的长度始终相同,您可以只使用 for 循环:
var gender = {
female: [14, 33, 28, 49],
male: [33, 50, 42, 61]
}
var m = gender.male;
var f = gender.female;
var genderP = {female:[], male:[]};
for (var i = 0; i < gender.female.length; i++) {
var t = m[i] + f[i];
genderP.male.push(m[i]/t);
genderP.female.push(f[i]/t);
}
console.log(JSON.stringify(genderP, null, 2));
/*
{
"female": [
0.2978723404255319,
0.39759036144578314,
0.4,
0.44545454545454544
],
"male": [
0.7021276595744681,
0.6024096385542169,
0.6,
0.5545454545454546
]
}
*/
_.zip
和_.unzip
也可以使用:
var gender = {
female: [14, 33, 28, 49],
male: [33, 50, 42, 61]
}
var genderP = _.zipObject(['male', 'female'], _.chain(_.zip(gender.male, gender.female))
.map(function(pair) {
var t = pair[0] + pair[1]
return [pair[0] / t, pair[1] / t]
})
.unzip()
.value());
console.log(JSON.stringify(genderP, null, 2));
/*
{
"male": [
0.7021276595744681,
0.6024096385542169,
0.6,
0.5545454545454546
],
"female": [
0.2978723404255319,
0.39759036144578314,
0.4,
0.44545454545454544
]
}
*/
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.7.0/lodash.min.js"></script>
关于javascript - 使用 .map 将数量转换为百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872840/