js 权重 概率
var _ = require('underscore');
var originArray = [10,20,30,40];
/*
reduce方法依次对集合的每个成员进行某种操作,然后将操作结果累计在某一个初始值之上,全部操作结束之后,返回累计的值。
该方法接受三个参数。第一个参数是被处理的集合,第二个参数是对每个成员进行操作的函数,第三个参数是累计用的变量。
_.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); =>6
*/
//获取概率权重数组
function overlay(originArray){
var overlayArray = [];
originArray.forEach(function (value,index) {
var tempArray = originArray.slice(0,index+1);
var a = _.reduce(tempArray, function(memo, num){
return memo + num;
}, 0);
overlayArray.push(a)
});
console.log('overlay array :',overlayArray);
return overlayArray;
}
overlay(originArray);
/**
sortedIndex_.sortedIndex(list, value, [iteratee], [context])
使用二分查找确定value在list中的位置序号,value按此序号插入能保持list原有的排序。
如果提供iterator函数,iterator将作为list排序的依据,包括你传递的value 。iterator也可以是字符串的属性名用来排序(比如length)。
_.sortedIndex([10, 20, 30, 40, 50], 35); => 3
var stooges = [{name: 'moe', age: 40}, {name: 'curly', age: 60}];
_.sortedIndex(stooges, {name: 'larry', age: 50}, 'age');
=> 1
*/
//获取权重索引
function getRateIndex (rate){
var array = overlay(originArray);
var index = _.sortedIndex(array, rate);
return index;
}
2 回复
567777777<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
#更新一个版本
var _ = require('underscore');
function overlay(array){
if(!array || !array.length || !(array instanceof Array)){
return [];
}
var rate = [];
array.forEach(function (value,index) {
var tempArr = array.slice(0, index + 1);
//memo 上一次计算的结果
rate.push(_.reduce(tempArr, function (memo,num) {
return memo + num;
},0));
});
return rate;
}