查找指定元素在数组中位置 function indexOf(arr, item) { if (Array.prototype.indexOf) {//判断是否支持indexOf方
查找指定元素在数组中位置
function indexOf(arr, item) { if (Array.prototype.indexOf) {//判断是否支持indexOf方法 indexof在ie浏览器不兼容 return arr.indexOf(item); } else { for (var i = 0; i < arr.length; i++) { if (arr[i] === item) { return i; /*return具有直接退出函数的功能,在return下面的代码不会执行而直接结束函数,所以不用break完全ok。*/ } } } return -1; }
数组求和
var arr = [1, 2, 3, 4];function sum(arr) { return eval(arr.join('+'));}/*1.join() 方法用于把数组中的所有元素放入一个字符串。2.语法:arrayObject.join(separator)3.参数:separator 描述:可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。4.返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。5.arr.join('+') 会返回字符串 1+2+3+4。6.eval会试图执行字符串 返回数组之和!*/
移除数组中元素
/*移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 例子:remove([1, 2, 3, 4, 2], 2);==>[1, 3, 4]*/function remove(arr, item) { for(var i=0, len=arr.length, newArr=[]; i<len; i++){ if(item === arr[i]) continue;/*如果全等 跳过*/ else newArr.push(arr[i]);/*将不相等的push数组*/ } return res;}/*另一种实现方法*//*题目要求不要修改原数组,而var a = arr;这样的写法实际只是让a引用了arr,若进行修改,实际仍然修改了原数组。因此需要将原数组复制给一个新的数组,可以通过var a = arr.slice(0);实现。使用pop方法可以删除数组的最后一个元素。*/function remove(arr, item) { var newArr=arr.slice(0); for(var i=0;i<newArr.length;i++){ if(item==newArr[i]){ newArr.splice(i,1); --i;//因为是删除了原始数组内容,数组长度变了,i--从当前位置再次查找。//splice方法会改变数组的长度,因此在每次删除之后,都需要执行i--以确保数组长度正确。 } } return newArr;}/*splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。注释:该方法会改变原始数组。arrayObject.splice(index,howmany);index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。例子:var arr = new Array(6)arr[0] = "少"arr[1] = "itme"arr[2] = "侠"arr[3] = "气"arr[4] = "交"arr[5] = "结五都雄"document.write(arr + "<br />")arr.splice(1,1,"年")document.write(arr + "<br />")输出:1:少,itme,侠,气,交,结,五,都,雄2:少,年,侠,气,交,结,五,都,雄*/
添加元素
在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
function append(arr, item) { return arr.concat([item]); // var arr2 = arr.slice(0); // arr2.push(item); // return arr2; }/*concat() 方方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。 !!!push()方法修改原数组,它返回的是新的数组的长度;但是也return 也能实现。*/
删除数组最后一个元素
function truncate(arr) { return arr.slice(0,-1); }/*slice() 方法可从已有的数组中返回选定的元素。语法arrayObject.slice(start,end)参数 描述start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。返回值 返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。说明 请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。*//*另一种方法*/function truncate(arr) { var a = arr.slice(0); a.pop();/*弹出末尾最一个元素*/ return a; }/*题目要求不要修改原数组,而var a = arr;这样的写法实际只是让a引用了arr,若进行修改,实际仍然修改了原数组。因此需要将原数组复制给一个新的数组,可以通过var a = arr.slice(0);实现。使用pop方法可以删除数组的最后一个元素。*/
添加元素
在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
function prepend(arr, item) { return [item].concat(arr);}/*return arr.concat([item]); 为什么不行?修改原数组了。*//*我想到的写法也就是这样了....*/function prepend(arr, item) { //将arr数组复制给a var a = arr.slice(0); //使用unshift方法向a开头添加item a.unshift(item); return a; }/* unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。返回值 arrayObject 的新长度。说明 unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素 1,以此类推。 请注意,unshift() 方法不创建新的数组,而是直接修改原有的数组。 注释:unshift() 方法无法在 Internet Explorer 中正确地工作! 注释:该方法会改变数组的长度!*//*题目要求不要修改原数组而var a = arr;这样的写法实际只是让a引用了arr,若进行修改,实际仍然修改了原数组。因此需要将原数组复制给一个新的数组,可以通过var a = arr.slice(0);实现。使用pop方法可以删除数组的最后一个元素。slice(0)指定了第一个必选参数start为 0 也就是从头开始截取。但是没有指定end参数,所以就是截取整个数组。*/
删除数组第一个元素
删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组
function curtail(arr){ return arr.slice(1);/* 或者 var a=arr.slice(0); a.shift(); return a;*/}/*slice();说明请注意,该方法并不会修改数组,而是返回一个子数组slice(1);从数组第二个位置截取数组到最后。返回截取后的新数组。*/
数组合并
合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组
function concat(arr1, arr2) { return arr1.concat(arr2); } var arr1=[0,1,2]; var arr2=[3,4,5]; var arr3=concat(arr1,arr2); console.log(arr1); console.log(arr2); console.log(arr3);/*concat() 方法用于连接两个或多个数组。 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。语法 arrayObject.concat(arrayX,arrayX,......,arrayX)参数 描述 arrayX 必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。返回值 返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。*/
添加元素
在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
function insert(arr, item, index) { //复制数组 var a = arr.slice(0); a.splice(index, 0, item); return a; }/*自己写的时候记错了splice的参数了 index 和item 位置写反了。index是下标位置 ,0处是要删除的个数。 item是要插入的元素。 要注意!*/
计数
统计数组 arr 中值等于 item 的元素出现的次数
/*自己写的*/function count(arr, item) { var c=0; for(var i=0,len=arr.length;i<len;i++){ if(arr[i]!=item){continue;} else{++c;} } return c;}/* continue:结束本次循环,循环变量继续递增或递减,开始下次循环 break:结束循环,执行循环后面的代码(如果有的话) return:结束函数的执行,return后面的所有代码都不再执行*//*题目本身很简单,有很多实现的方式,循环遍历,正则表达式都可以很容易实现。使用循环遍历,首先声明一个变量count用于计数,forEach循环看起来更加简洁传入一个匿名方法,接收一个参数e用于传入数组中的每一项最后用一个三元条件运算符来判断结果true则执行count++,false则为0,最后返回count。*/function count(arr, item) { var count = 0; arr.forEach(function(e){ //e为arr中的每一个元素,与item相等则count+1 e == item ? count++ : 0; }); return count; }
查找重复元素
找出数组 arr 中重复出现过的元素
var arr = [1, 2, 6, 4, 5, 6, 7, 7, 9, 0, 2, 3, 5, 4, 6];/*自己写的*/ function duplicates(arr) { arr.sort()/*之前写的时候出错了,因为没有对数组排序。无法比较相邻元素是否相同,所以要先对数组排序*/ console.log(arr.sort());//[0, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 9] for (var i = 0, arr1 = [], len = arr.length; i < len; i++) { if (arr[i] == arr[i + 1]) {//当前元素a和下一元素b作比较 如果相同 push 进新数组 arr1.push(arr[i]); i++;//如果相同下一次对比位置从b+1之后再循环+1的位置进行比较 跳过比较过的元素 } } if (arr1.length == 0) { throw "没有相同的!" } return arr1; } console.log(duplicates(arr));//[2, 4, 5, 6, 7]/*其他写法*/function duplicates(arr) { var a=arr.sort(),b=[]; for(var i in a){ if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]); } return b;}//先排序,如果后一个与前一个相等且未保存,则保存。
求二次方
为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
function square(arr) { var a=arr.slice(0);//截取整个数组赋值给 新数组a if(Array.prototype.forEach){//貌似IE不支持,所有判断一下,能用就用。不能用拉倒 a.forEach(function(e,index){ a[index]=e*e; }); }else{ for(var i= 0,len= a.length;i<len;i++){ a[i]=a[i]*a[i]; } } return a; }/*大神写的如下*/function square(arr) { return arr.map(function(item,index,array){ return item*item; })}
查找元素位置
在数组 arr 中,查找值与 item 相等的元素出现的所有位置
/*查找target的位置,只需要将数组arr中键值对key-value中value == target的key找出来存到新数组而已。因此,遍历arr,如果target == arr[i],i即目标值位置,则将i加入到a数组中。*/ function findAllOccurrences(arr, target) { for(var i= 0,len= arr.length,a=[];i<len;i++){ if(arr[i]!=target){continue;}else{ a.push(i); } } return a; }