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

求平均数的代码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);
第二种思想:直接的操作argumentsfunction 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不兼容
时间: 2024-08-03 09:50:29

求平均数-----类数组转换成数组的相关文章

将伪数组转换成数组

这里把符合以下条件的对象称为伪数组: 1,具有length属性 2,按索引方式存储数据 3,不具有数组的push,pop等方法 如 1,function内的arguments . 2,通过document.forms,Form.elements,Select.options,document.getElementsByName() ,document.getElementsByTagName() ,childNodes/children等方式获取的集合(HTMLCollection,NodeLi

zend framework获取数据库中枚举类enum的数据并将其转换成数组

在model中建立这样的模型,在其中写入获取枚举类的方法 class Student extends Zend_Db_Table{ protected $_name ='student'; protected $_primary ='id'; function getPartyEnum($enumname){ //适配器并获取数据 $db = $this->getAdapter(); $db->query("SET NAMES GBK"); $sql = $db->q

工具类Arrays.asList()方法把数组转换成集合

工具类Arrays.asList()方法把数组转换成集合 不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException() 问题分析: 1.测试 被注释的三行可以分别解开注释,运行后确实出现了上述所说的异常 2.看源码 似乎没有问题.往下看 然而实际上我们点进到ArrayList发现,其实ArrayList并不是我们平时用的ArrayList.而是Arrays里面的一个内部类.而且这个内部类没有add,clear,remo

【第3篇】通过JSON-Lib把数组转换成Json数据

package ivyy.taobao.com.domain.jsonlib; import ivyy.taobao.com.entity.Address; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** *@DEMO:j

在Ajax中将数组转换成字符串

主页面; <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ajax查表格</title> <script src="../jquery-1.11.2.min.js"> </script> </head> <body> <div&

$.toJSON的用法或把数组转换成json类型

1. html页面全部代码 <html> <head>     <title></title> <script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <script src="../../Scripts/JqueryJson.js" type="text

笔试算法题(31):将有序数组转换成BST表示 &amp; 线段树的应用

出题:要求将一个有序整数数组转换成最小深度的Binary Search Tree表示: 分析:由于需要是最小深度,所以BST应保持平衡,左右节点数大致相当,并且BST中当前根节点大于所有其左子树中的元素,小于所有其右子树中的元素.对于排序数组而言,中间元素必然作为根节点,然后递归对由中间元素分割的左右数组部分进行处理: 解题: 1 struct Node { 2 int value; 3 Node *left; 4 Node *right; 5 }; 6 7 Node* Array2BST(in

C#字节数组转换成字符串

C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Encoding.该类提供了 bye[] GetBytes(string) 方法将字符串转换成字节数组,还提供了 string GetString(byte[]) 方法将C#字节数组转换成字符串. System.Text.Encoding 类似乎没有可用的构造函数,但我们可以找到几个默认的 Encodin

如何在AJAX的毁掉函数中传递JSON数据?如何在控制器中接受并转换成数组?

首先,我们经过测试(或者你平时的开发经验)知道,在AJAX的回调函数中使用get或者post方式可以传递字符串(不信可以自己去写实例测试,不过要注意:get方式有数据量的限制): 方法一:我们将ajax的请求放回的JSON数组转换成字符串,然后在回调函数中get过去: a.html页面的AJAX请求代码: b.后台两个处理函数(尤其注意第二个是回调函数指向的处理函数): 方法二:我们在回调函数中直接处理发送一个新的AJAX请求(也可以写成匿名函数),将ajax请回来的JSON数组转化为字符串作为