• 求平均数-----类数组转换成数组


    求平均数的代码
    function avgFn() {
    首先把arguments转化为数组
    var ary = [];
    for (var i = 0; i < arguments.length; i++) {
    ary.push(arguments[i]);
    ary[ary.length] = arguments[i];
    }
    数组排序
    ary.sort(function (a, b) {
    return a - b;
    });
    掐头去尾
    ary.unshift();
    ary.pop();
    求和求平均值,小数保留两位值
    eval() 把字符串转化成JS表达式供我们使用
    return (eval(ary.join("+"))/ary.length).toFixed(2);
    }
    var res = avgFn(2, 9, 0, 4, 5);
    console.log(res);

    *********************************************
    arguments.sort进行排序的时候报了一个错误:arguments.sort is not a function ?
    sort是Array这个内置类原型上的一个方法,只有Array的实例(数组)才能使用这些方法,而arguments虽然长得像数组但是不是数组(类数组),arguments不是Array这个类的一个实例,所以不能直接的使用sort方法...
    console.log(arguments instanceof Array);//->false
    如何把类数组转换成数组
    模拟数组的slice方法实现最简单的操作:数组的克隆
    Array.prototype.slice = function () {
    var ary = [];
    数组的slice就是这样实现克隆的
    for (var i = 0; i < this.length; i++) {
    ary[ary.length] = this[i];//->ary.push(this[i]);
    }
    把arguments转换为数组
    for (var i = 0; i < arguments.length; i++) {
    ary[ary.length] = arguments[i];
    }
    return ary;
    };
    [12, 23, 34].slice();
    规律:虽然arguments不是数组,但是它是类数组,也就是相关的操作其实和数组非常的相似,比如循环等都比较相似;对比上述的代码我们发现,内置slice中实现克隆的代码和我们把 arguments转换为数组的代码基本一样,只不过上边用的是this,而下边用的是argumnets;换句话说是要让slice执行的时候,里面的this变为arguments,就相当于我们把arguments转换为数组;!!!slice(start,end)从已有的数组中返回指定的元素( 前面包含 后面不包含)

    function avgFn() {
    借用数组的slice方法实现将类数组转换为数组
    var ary = Array.prototype.slice.call(arguments, 0);
    //var ary=[].slice.call(arguments,0);
    ary.sort(function (a, b) {
    return a - b;
    });
    ary.shift();
    ary.length--;
    return (eval(ary.join("+")) / ary.length).toFixed(2);
    }

    var res = avgFn(2, 9, 0, 4, 5);
    console.log(res);
    第二种思想:直接的操作arguments
    function avgFn() {
    [].sort.call(arguments, function (a, b) {
    return a - b;
    });
    [].shift.call(arguments);
    [].pop.call(arguments);
    return (eval([].join.call(arguments, "+")) / arguments.length).toFixed(2);
    }
    var res = avgFn(2, 9, 0, 4, 5);
    console.log(res);
    *********************************************************8
    var oList = document.getElementsByTagName("div");//获取的是一个元素的集合也是一个类数组

    兼容的话使用下面的代码
    var ary = Array.prototype.slice.call(oList, 0);

    不兼容的话自己使用for循环处理
    for (var i = 0; i < oList.length; i++) {
    ary[ary.length] = oList[i];
    }

    function fn() {
    console.log(Array.prototype.slice.call(arguments, 0));
    }
    fn(100, 200, 300)

    借用数组原型上的slice方法把我们的类数组转化为数组,对于arguments来说兼容所有的浏览器,但是对于DOM元素/节点集合来说在IE6~8不兼容



    lilistToArray: function (likeAry) {
    var ary = [];
    try {
    ary = Array.prototype.slice.call(likeAry, 0);
    } catch (e) {
    for (var i = 0; i < likeAry.length; i++) {
    ary[ary.length] = likeAry[i];
    }
    }
    return ary;
    },
  • 相关阅读:
    第七章-方法区
    wchar_t 字符拼接
    C++获取appdata路径
    char * 、BSTR、long、wchar_t *、LPCWSTR、string、QString类型转换
    climits 与 符号常量
    Qt数据结构-QString二:QString的arg能不能像Python的format一样使用
    Qt数据结构-QString一:常用方法
    怎么查看摄像头的硬件ID
    jenkins提示使用java11版本
    Jenkins:the input device is not a TTY
  • 原文地址:https://www.cnblogs.com/supershare/p/5630087.html
Copyright © 2020-2023  润新知