Javascript算法练习(五)

来源:互联网 发布:react java web项目 编辑:程序博客网 时间:2024/05/19 16:34

Javascript算法练习(五)

荒废里几个星期没学习了,还是要持之以恒才行,这次小问题一个,弄了几个小函数,本来目的很简单,就是想从数组中找出最大值和最小值,然后将这两个值之间的数相加起来。本来挺简单的事情,写着写着需要考虑的事情就越多……,记录下^_^!!!

  • sumAllBetweenMinToMax(__arr),主要就这个函数了,下面的都是为它服务的,貌似服务很周到 - -!

    // ------------- 是不是很暴力,直接贴代码 --------------------  /** * 4. 数组中最大值和最小值之间的所有数的和 * 传入的合法参数的几种情况 * 1) 数组只有一个数字型元素,直接返回该元素 * 2) 数组有两个数字型元素,比较取最大值和最小值,创建数组将其之间的值相加 * 3) 数组超过两个数字型元素,找出最大和最小值,进行第二步 * 4) 其他情况,即数组中可能有非数字型的元素(如:对象,字符串等待),需要过滤 * @param  {[type]} __arr [description] * @return {[type]}       [返回数组中最小值与最大值之间所有数值的和] */function sumAllBetweenMinToMax( __arr ) {    var arr             = __arr,        maxAndMinArr    = [],        targetArr       = [],        tmpArr          = null;    // 参数错误    if ( argumentErrorHandler(__arr) ) return;    // 1. 只有一个元素,且元素是数值,直接返回该值    if ( arr.length == 1 && !isNaN(arr[0]) ) return arr[0];     // 2. 如果只有两个元素,且两个元素的值相同,直接返回该值    if ( arr.length == 2 && arr[0] == arr[2] ) return arr[0] + arr[1];    // 3. 取出数组中最大值和最小值    tmpArr       = splitArrayToEleInArray( arr ); // 取出的数组中只包含普通元素,不包含数组    maxAndMinArr = getMaxAndMinFromArray( tmpArr );    var max = maxAndMinArr[0],        min = maxAndMinArr[1];    // 把min -> max之间的数及其自身保存到数组中    for ( var i = min; i < max + 1; i++ ) {        targetArr.push(i);    }    // 遍历数组    // reduce的使用:    // arr.reduce(callback[, initValue]);    // callback: function(preV, curV, curIdx, array){}    // preV: 如果与数组中的第一个值相同,则作为第一个值,会影响curV的值和索引    //       如果与数组中第一个值不相同,则作为基准值,不会影响curV的值和索引,且curV的值和索引都是数组中第一个元素对应的值和索引    // curV:如上,受preV影响    // curIdx: 如上,为curV的值在数组中的索引值    // array:当前数组    var total = targetArr.reduce(function (preV, curV, curIdx, array) {        return preV + curV;    }, 0);    return total;}
  • argumentErrorHandler: 错误处理函数,想整个统一的错误处理(貌似有点想多了,Σ( ° △ °|||)︴)

    // 1. 参数判断,错误返回// __type: [TODO]//      == 0 : 数值//      == 1 : 字符串//      == 2 : 数组//      == 3 : 对象function argumentErrorHandler( __args, __type ) {    if ( !isArrayObj(__args) || !__args || __args.length <= 0 ) {        console.log("ERROR: not array or empty array, please check your arguments... !");        return true;    }    return false;}
  • splitArrayToEleInArray,搞定参数问题就这个了,就是将数组中元素为数组的元素原地拆分合并到原数组

    function splitArrayToEleInArray( __arr ) {    // 参数错误    if ( argumentErrorHandler(__arr) ) return;    var oneDimenArr     = [];    // 遍历数组,递归合并数组    __arr.forEach( function(element, index) {        if ( isArrayObj(element) ) { // 元素为数组            oneDimenArr = oneDimenArr.concat( element ); // 如果是数组,直接合并        } else if ( isObject(element) ) {            // 如果是对象就跳过,差点忘掉你了 - -!        } else {            oneDimenArr.push( element );        }    });    // 数组中有元素为数组,递归继续执行合并操作,否则直接返回当前处理后的数组oneDimenArr    return hasArray( oneDimenArr ) ? splitArrayToEle( oneDimenArr ) : oneDimenArr;}
  • getMaxAndMinFromArray,这个是从数组中拿到最大值和最小值(仅数值型哦,什么字符串对象数组,统统无视啦)

    /** * 2. 获取数组中的最大值和最小值, 跳过非数字型元素 * @param  {[type]} __arr [description] * @return {[type]}       [返回包含两个元素的数组,第一个为最大值,第二个为最小值] */function getMaxAndMinFromArray( __arr ) {    // 参数错误    if ( argumentErrorHandler(__arr) ) return;    var max = __arr[0],        min = __arr[0];    __arr.forEach( function(element, index) {        // 是数字的情况下才去找,同时可以过滤非数字型的元素        if ( !isNaN(element) ) {            element = parseInt(element);            max = element > max ? element : max;            min = element < min ? element : min;        }    });    return [max, min];}
  • hasArray,这个就不解释了吧,就是判断数组中是否还有数组元素啦,嘴真贱!!!

    /** * 1. 判断数组中是否存在数组类型的元素 * @param  {[type]}  __arr [description] * @return {Boolean}       [true: 存在数组类型元素,false:不存在数组型元素] */function hasArray( __arr ) {    if ( argumentErrorHandler(__arr) ) return;    for (var i = 0; i < __arr.length; i++ ) {        if ( isArrayObj(__arr[i]) ) return true;    }    return false;}
    1. 写着写着,其实也就为了个很简单的功能而已,居然整出这么几个来,还萌生出将这些保存到mycode.js里了,也没啥不好的吧。想法不都是随时产生的,慢慢积累,慢慢折腾,记录总是个好习惯。说不定以后用得着!!

我的博客地址:http://blog.csdn.net/gccll

我的github仓库:https://github.com/gcclll

0 0
原创粉丝点击