js 权重 概率
发布于 8 年前 作者 NextZeus 4978 次浏览 来自 分享
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;
}

回到顶部