Array 1

130 阅读6分钟

数组的创建,最简单的字面量方式

var arr = [ 1,2,77,8,4,5 ];

添加、删除

arr.length = 0; //清空数组的方法,让length等于0;
arr = []; //从新赋值一个空数组,清空
arr.unshift( 0 ); //向数组的第一位添加内容
arr.push( 99 ); //向数组最后一位添加内容
arr.shift();// 删除数组的第一位,返回被删除值
arr.pop(); //删除数组的最后一位,返回被删除值
arr.splice( start1 , end3 );// 删除类 ,从开始第1个起删除到结束第3个
不包括第三个,返回删除的组成的新数组,不影响原数组。
arr.splice( 0 , 0 , ‘xuanmo’ );//添加,从第0个开始添加
arr.splice( 1 , 1 , ‘xuanmo’ ); //替换,替换掉第一个

排序

arr.sort();//数组排序,默认以字符串大小编码排序
arr.sort(function( a , b ){ return a – b });//标准排序传入比较函数,
alert( str.split('').join('-') );//字符串拆分成数组,并未没一个字符后添加一个‘-’
arr.concat( arr1 );//拼接数组,把两个或者多个数组拼接在一起
arr.reverse();//数组前后调换位置
console.log( str.split('').reverse().join('') );//利用reverse()方法将字符串换位置

数组转换成字符串

arr.join(''); //把数组变成字符串

随机排序

var arr = [0, 1, 2, 3, 4];
arr.sort( randomSort );
function randomSort(){
  return Math.random() > 0.5 ? -1 : 1;
}

数组去重

// ES5方法
function deleteArray( arr ){
  for( var i = 0; i < arr.length; i++ ){
    for( var j = i+1; j < arr.length; j++ ){
      if( arr[i] == arr[j] ){
        arr.splice(j, 1);
        j--;
      }
    }
  }
  return arr;
}

// 利用indexOf方法
function removeArrayRepeat (arr) {
  var newArr = [];
  for(var i = 0, len = arr.length; i < len; i++){
    if(newArr.indexOf(arr[i]) === -1) newArr.push(arr[i]);
  }
  return newArr;
}

// ES6方法
Array.from(new Set([1, 2, 3, 2, 5, 8, 1]))  // [1, 2, 3, 5, 8]

// 利用扩展运算符方法
[...new Set([1, 2, 3, 2, 5, 8, 1])]  // [1, 2, 3, 5, 8]

数组就是一组数据的集合,JavaScript中,数组里面的数据可以是不同类型

/*通过类实例化来创建数组*/
var aList01 = new Array(1,3,5,7);

/*通过字面量的方式*/
var aList02 = [1,2,3];

/*获取组的类成员个数*/
alert(aList02.length);

/*通过下标操作数*/
alert(aList01[2]);

/*通过push在数组后面添加成员*/
aList01.push('m');
alert(aList01);

/*从后面删除成员*/
aList01.pop();
alert(aList01);

/*从前面添加成员*/
aList01.unshift(1);
alert(aList01);

/*从前面删除成员*/
aList01.shift();
alert(aList01);

/*反转排序*/
aList01.reverse();
alert(aList01);

/*指出元素在组的位置*/
var aList03 = ['a','b','c','d'];
alert(aList03.indexOf('c'));

/*splice(起始位,删除个数,添加元素)*/
aList03.splice(1,2,'e','f');
alert(aList03);

/*join把元素连接,要用变量来接收字符串*/
var sTr = aList03.join('-');
alert(sTr);

###数组遍历 1.使用for循环来遍历一个数组 let arr=[2,4,6,10]; for(let i=0;i<arr.length;i++){ console.log(arr[i]); } 2.for-in let arr=[2,4,6,10]; for (var index in arr){ console.log(arr[index]); } 还可以遍历对象,得到键值对中的键 let per={ name:"zhang San", sex:'male', age:18 }; for(let key in per){ console.log(key);//name,sex,age } 3.forEach 4.for-of(ES6中新增),效率最高 let arr=[3,7,9]; for (let key of arr){ console.log(key); }

###数组过滤 1.filter过滤 let arr=[1,2,3,4,5,6]; let newArr=arr.filter(o=>o%2==0); console.log(newArr);//2 4 6 2.every和some方法,返回一个真假布尔值 every判断是不是每一个都符合条件 some判断是不是有符合条件的 let arr=[1,2,3,4,5,6]; console.log(arr.some(o=>o%3==0));//true

###是否改变原数组

  • concat() 连接两个或多个数组 不改变原数组 返回被连接数组的一个副本
  • join() 把数组中所有元素放入一个字符串 不改变原数组 返回字符串
  • slice() 从已有的数组中返回选定的元素 不改变原数组 返回一个新数组
  • toString() 把数组转为字符串 不改变原数组 返回数组的字符串形式
  • pop() 删除数组最后一个元素,如果数组为空,则不改变数组,返回undefined 改变原数组 返回被删除的元素
  • push() 向数组末尾添加一个或多个元素 改变原数组 返回新数组的长度
  • reverse() 颠倒数组中元素的顺序 改变原数组 返回该数组
  • shift() 把数组的第一个元素删除,若空数组,不进行任何操作,返回undefined 改变原数组 返回第一个元素的值
  • sort() 对数组元素进行排序(ascii) 改变原数组 返回该数组
  • splice() 从数组中添加/删除项目 改变原数组 返回被删除的元素
  • unshift() 向数组的开头添加一个或多个元素 改变原数组 返回新数组的长度
join(separator)
将数组的元素组起一个字符串,以separator为分隔符,
省略的话则用默认用逗号为分隔符,该方法只接收一个参数:即分隔符。

push()和pop()
push()  接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度; 
pop()   数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项。

shift() 和 unshift()
shift()  删除原数组第一项,并返回删除元素的值,  如果数组为空则返回undefined; 
unshift  将参数添加到原数组开头,并返回数组的长度 。

reverse()
//反转数组项的顺序
var arr = [1, 3, 5, 7];
console.log(arr.reverse()); //[7, 5, 3, 1]
console.log(arr); //[7, 5, 3, 1](原数组改变).

concat()
将参数添加到原数组中。这个方法会先copy一个当前数组,
然后将接收到的参数添加到这个copy数组的末尾,
最后返回新构建的数组。
在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回。

indexOf()和 lastIndexOf()
indexOf()  接收两个参数:
要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的开头(位置 0)开始向后查找。 

lastIndexOf接收两个参数:
要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的末尾开始向前查找。

这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1。

在比较第一个参数与数组中的每一项时,会使用全等操作符。

forEach()
这个方法只支持IE8以上的浏览器, 所以如果需要兼容IE8,
则不要使用forEach,  还是使用for循环来遍历

使用:
forEach()方法需要一个函数作为参数
该函数,由我们创建但是不由我们调用的,称为回调函数
数组中有几个元素, 函数就会执行几次,每次执行时,
浏览器会将遍历到的元素以实参的形式传递进来,我们可以来定义形参,来读取这些内容

浏览器会在回调函数中传递三个参数
第一个参数,就是当前正在遍历的元素
第二个参数,就是当前正在遍历的元素的索引
第三个参数,就是正在遍历的数组

格式
arr.forEach(function(value , index , obj){
  console.log(value);
});