API --Array

来源:互联网 发布:仓库货物记账软件 编辑:程序博客网 时间:2024/06/06 00:52

Array

arr.join(); 连接,返回按指定格式连接的数组

var arr=[1,2,3,4,5,6];console.log(arr.join()); //1,2,3,4,5,6console.log( arr.join('')); //123456console.log(arr.join('%')); //1%2%3%4%5%6console.log(arr.join('&|')); //1&|2&|3&|4&|5&|6

arr.concat(); 拼接,返回新的数组

console.log( arr.concat('a','b',9,[5,[6,7]]));//[ 1, 2, 3, 4, 5, 6, 'a', 'b', 9, 5, [ 6, 7 ] ]//无法打散嵌套的数组。

arr.slice(); 选取,返回新的

/* arr.slice(start, end+1);    选取从start位置到end位置,注意+1,    省略第二个参数默认到最末尾。 */var arr=[1,2,3,4,5,6];console.log( arr.slice(1,3)); //[ 2, 3 ]console.log(arr.slice(2)); //[ 3, 4, 5, 6 ]console.log(arr.slice()); //[ 1, 2, 3, 4, 5, 6 ]//-----支持负数,表示倒数第几个。console.log( arr.slice(1,-2)); //[ 2, 3, 4 ]console.log(arr.slice(-5,-2)); //[ 2, 3, 4 ]console.log(arr.slice(-4)); //[ 3, 4, 5, 6 ]

arr.splice(); 切割,直接修改原数组!

/*arr.splice(start,n); //--从start删n个,返回值:被删除元素组成的临时子数组var arr=[1,2,3,4,5,6];console.log( arr.splice(0,3) ); //[ 1, 2, 3 ]console.log(arr); //[ 4, 5, 6 ]//--插入新值 arr.splice(start,0,v1,v2,...); 不能打散数组。console.log(arr.splice(1,0,9,[8,7],'a')); //[]console.log(arr); //[4, 9, [8,7], 'a',  5, 6 ]//--删除的同时插入新值。arr.splice(start,n,v1,v2,...);类似上面var arr=[1,2,3,4,5,6]console.log(arr.splice(2,3,9,[8,7],'a')); //[ 3, 4, 5 ]console.log(arr); //[ 1, 2, 9, [ 8, 7 ], 'a', 6 ]

arr.sort(); 排序,直接修改原数组!

console.log( [2,4,3,5,1,6].sort()); //[ 1, 2, 3, 4, 5, 6 ]/--sort默认会将每个元素先转为string,再按字符串类型比较大小console.log([1,12,'3','23','21',3,5,2].sort());//[ 1, 12, 2, '21', '23', '3', 3, 5 ]//--定义比较器函数console.log([1,12,'3','23','21',3,5,2].sort((a,b)=>(a-b)));//[ 1, 2, '3', 3, 5, 12, '21', '23' ]console.log([1,12,'3','23','21',3,5,2].sort((a,b)=>(b-a)));//[ '23', '21', 12, 5, '3', 3, 2, 1 ]

arr.reverse(); 翻转,直接改原数组!

var arr=[1,2,3,4,5,6];console.log(arr.reverse()); //[6,5,4,3,2,1]console.log(arr); //[6,5,4,3,2,1]console.log([1,12,'3','23','21',3,5,2].reverse());//[ 2, 5, 3, '21', '23', '3', 12, 1 ]

arr.push(); 数组尾部加一个

console.log(arr.push(7)); //7console.log(arr); //[1,2,3,4,5,6,7]

arr.pop();数组尾部减一个

var arr=[1,2,3,4,5,6];console.log(arr.pop()); //6console.log(arr); //[ 1, 2, 3, 4, 5 ]

arr.unshift();数组头部加一个

console.log(arr.unshift(7));  //7console.log(arr); //[ 7, 1, 2, 3, 4, 5, 6 ]

arr.shift();数组头部减一个

console.log(arr.shift()); //1console.log(arr); //[ 2, 3, 4, 5, 6 ]

二维访问: arr[r][c]
注意: 二维数组的行下标r不能越界
遍历: 外层循环控制行,内层循环控制列

ES5新方法 –犀牛书

foreach()

var arr=[1,2,3,'a',[4,5],{age:18}];arr.forEach(function (value, key, arr) { console.log(arr[key]); console.log(value);})/*函数通常只需第一个参数,以上两个的输出是一样的,输出数组的每个值 1 2 3 'a' [4,5] {age:18}*/arr.forEach(function (value) {  console.log(value);  if(value===3){   // throw new Error('manual stop');     return ;  }})/*想在value等于3时跳出遍历,但写return无效,运行还是会输出所有的值  暂未想明白。先留一下。如果改成throw new Error 输出1 2 3 然后抛出错误。*/

map()

/* 调用数组每个元素传给指定的函数,并返回一个数组 */var arr=[1,2,3,4,5,6];var n=  arr.map((x)=>{  return x*x;})console.log(n); //[ 1, 4, 9, 16, 25, 36 ]console.log(arr); //[1,2,3,4,5,6]

filter()

/* 会跳过稀疏数组中缺少的元素,总是返回稠密的数组*/var arr=[1,2,3,4,5,6];var a = arr.filter( (x)=> x<4 )console.log(a); //[1,2,3]//压缩空缺删除undefined nullvar arr=[1,2,3,4,5,6,null, ,];var a = arr.filter( (x)=> x!==undefined&&x!=null )console.log(a); //[ 1, 2, 3, 4, 5, 6 ]

every()

var arr=[1,2,3,2,3,4,1];console.log( arr.every((x)=> x<10)); //ture  arr中每一个数都小于10吗? 恩 是的。 console.log( arr.every((x)=> x<3)); //fasle  arr中每一个数都小于3吗? 不 不是的。 

some()

var arr=[1,2,3,2,3,4,1];console.log( arr.some((x)=> x>10));//false  arr中有大于10的数吗? 没有! console.log( arr.some((x)=> x<3));//true  arr中有小于3的数吗? 有! 

indexOf()

//返回找到的第一个元素的下标,没找到返回-1。从前 往后找var arr=[1,2,3,2,3,4,1];console.log(arr.lastIndexOf(3));  //4console.log(arr.indexOf(3));  //2

lastIndexOf()

//返回找到的第一个元素的下标,没找到返回-1。 从后 往前找var arr=[1,2,3,2,3,4,1];console.log(arr.lastIndexOf(3));  //4console.log(arr.indexOf(3));  //2

reduce()

var arr=[1,2,3,2,3,4,1];console.log( arr.reduce( (x,y)=>x+y, 100) ); // 116  即100+1+2+3+2+3+4+1console.log( arr.reduce( (x,y)=>x*y, 1));// 144  即1*2*3*2*3*4*1/*第一次调用时:reduce第一个参数是初始值 就是传给reduce的第二个参数 此处为100。 再把数组的第一个值传给y此时相当于: function(100,1){  return 100+1 } 接下来的调用 把上一步return的结果,传给x, 数组的下一个元素传给y function(101,2) {return 101+2} 重复进行  最后求得结果。*/

reduceRight()

同上reduce 只是倒过来算 1+2+3  ==>  3+2+1  //更多用法再见犀牛书 o(╯□╰)o

Array.isArray()

//判断是否为数组console.log(Array.isArray([]));  //trueconsole.log(Array.isArray({})); //false//在ES3中可以这么写var isArray = Function.isArray || function(o){    reture typeof o === "object" &&     Object.prototype.toString.call(o) ==="[object Array]"}

++其他,把字符串当只读数组看待。用Array.isArray()判断会返回false

for(var i=0; i<'abcd'.length; i++){    console.log('abcd'[i]);}// a b c d