1、数组

1、创建数组:

var numArr = [];
var numArr = new Array();
var numArr = [1, 2, 3];
var numArr = new Array(1, 2, 3);

调用Array构造函数时,可以只传入一个参数,用来指定数组的长度:

var numArr = new Array(10);
console.log(numArr.length);

调用Array.isArray()来判断一个对象是否是数组:

console.log(numArr.isArray());      // 返回true/false


2、由字符生成数组:split()

var str = "Late in autumn";
var arr = str.split(" ");
console.log(arr);

 

3、

1)浅复制:新数组依然指向原来的数组,改变原数组内容,新数组也被改变。

var nums = [1, 2, 3, 4, 5];
var copyArr = nums;

console.log("nums: " + nums);             //nums: 1,2,3,4,5
console.log("copyArr: " + copyArr);      //copyArr: 1,2,3,4,5

nums[1] = 99;
console.log("nums: " + nums);             //nums: 1,99,3,4,5
console.log("copyArr: " + copyArr);      //copyArr: 1,99,3,4,5

 

2)深复制:两个数组互不相关

var nums = [1, 2, 3, 4, 5];
var copyArr = [];
copy(nums, copyArr);

console.log("nums: " + nums);             //nums: 1,2,3,4,5
console.log("copyArr: " + copyArr);       //copyArr: 1,2,3,4,5

nums[1] = 99;
console.log("nums: " + nums);             //nums: 1,99,3,4,5
console.log("copyArr: " + copyArr);       //copyArr: 1,2,3,4,5

//深复制函数
function copy(arr1, arr2){
    for(var i=0; i<arr1.length; ++i){
        arr2[i] = arr1[i];
    }
}

 

3)slice():它截取数组的部分元素,然后返回一个新的数组:

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];

var arr2 = arr.slice(0, 3);
console.log(arr2);            //["A", "B", "C"]

var arr3 = arr.slice(3);      //从索引3开始到最后
console.log(arr3);            //["D", "E", "F", "G"]

注意slice()的起止参数包括开始索引,不包括结束索引。

如果不传递任何参数,它就会从头到尾截取所有元素。

利用这一点,我们可以很容易地复制一个数组,属于深复制,两数组互不相关:

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
var aCopy = arr.slice();
console.log(aCopy === arr); // false

 

4、查找元素:indexOf()、lastIndexOf()

用来查找传进来的函数在目标数组中是否存在,如果存在,则返回该元素在数组中的索引;如果不存在,则返回-1。

indexOf():总是返回第一个与参数相同的元素的索引;

lastIndexOf():返回相同元素中最后一个元素的索引

var arr = [1, 2, '3', 'late', 3, 2];
console.log(arr.indexOf(1)); // 0
console.log(arr.indexOf(2)); // 1
console.log(arr.lastIndexOf(2)); // 5
console.log(arr.indexOf('3')); // 2
console.log(arr.indexOf('late')); // 3
console.log(arr.indexOf(3)); // 4
console.log(arr.indexOf('2')); // -1

 

5、数组转为字符串:join() 和 toString()

var arr = ['A', 'B', 'C', 1, 2, 3];

console.log(arr.join('-'));     // 'A-B-C-1-2-3'

console.log(arr.join());         // 'A,B,C,1,2,3'

console.log(arr.toString());   // 'A,B,C,1,2,3'

 

 

6、由已有数组创建新数组:

1)concat():合并多个数组创建一个新数组,不改变原数组

var arr1 = ['A', 'B', 'C'];
var arr2 = [1, 2, 3];
var arr3 = arr1.concat(arr2);

console.log(arr1);  //['A', 'B', 'C]
console.log(arr2);  //[1, 2, 3]
console.log(arr3);        //['A', 'B', 'C', 1, 2, 3]

 

2)splice():截取一个数组的子集创建一个新数组,原数组也会被改变,第一个参数是截取的起始索引,第二个参数是截取的长度。

var arr1 = ['A', 'B', 'C', 1, 2, 3];
var arr2 = arr1.splice(2, 3);

console.log(arr1);        //["A", "B", 3]
console.log(arr2);        //["C", 1, 2]

 

7、为数组添加元素:

push() :将元素添加到数组末尾

unshift() :将元素添加在数组的开头

返回数组的长度

var arr1 = ['A', 'B', 'C'];

arr1.push(1);
console.log(arr1);        //["A", "B", "C", 1]]

arr1.push(2, 3);
console.log(arr1);        //["A", "B", "C", 1, 2, 3]

arr1.unshift(99);
console.log(arr1);        //[99, "A", "B", "C", 1, 2, 3]

arr1.unshift(88, 77);
console.log(arr1);        //[88, 77, 99, "A", "B", "C", 1, 2, 3]

 

8、从数组中删除元素:

pop():删除数组末尾的元素

shift():删除数组的第一个元素

返回删除的元素

var arr1 = ['A', 'B', 'C', 1, 2, 3];

var num1 = arr1.pop();        //3
console.log(arr1);            //["A", "B", "C", 1, 2]

var num2 = arr1.shift();      //'A'
console.log(arr1);            //["B", "C", 1, 2]

 

9、从数组的中间位置添加或删除元素:

splice():为数组添加函数,需传入参数如下:

1)起始索引(开始添加元素的地方)

2)需要删除的元素个数(添加元素时此参数设为0)

3)想要添加进数组的元素

var arr1 = ["A", "B", "C", 1, 2, 3];

//添加元素
arr1.splice(3, 0, 77, 88, 99);
console.log(arr1);        //["A", "B", "C", 77, 88, 99, 1, 2, 3]

// 删除元素
arr1.splice(2, 3);
console.log(arr1);        //["A", "B", 99, 1, 2, 3]

 

10、数组排序

1)倒序 - reverse()

var arr1 = ["A", "B", "C", 1, 2, 3];
arr1.reverse();        //[3, 2, 1, "C", "B", "A"]
console.log(arr1);

 

2)  顺序 - sort()

如果数组元素是字符串类型

var arr1 = ["G", "R", "D"];
arr1.sort();        //["D", "G", "R"]
console.log(arr1);

 

如果数组元素是数字类型:由于sort()方法是按字典顺序对元素进行排列,因此它假定元素都是字符串类型,

为了让sort()方法也能排序数字类型的元素,可以在调用方法时传入一个大小比较函数。

var arr1 = [2,33,1,41,31,9];
console.log("arr1: " + arr1);

arr1.sort();
console.log("arr1: " + arr1);     //1,2,31,33,41,9

arr1.sort(compare);
console.log("arr1: " + arr1);     //1,2,9,31,33,41

function compare(num1, num2) {
    return num1 - num2;
}

 

11、forEach():接受一个函数作为参数,对数组中的每个元素使用该函数

function square(num){
    console.log(num + "*" + num + "=" + num*num);
}

var nums = [1, 2, 3, 4, 5];
nums.forEach(square);

输出:
  1*1=1
  2*2=4
  3*3=9
  4*4=16
  5*5=25

 

12、every():接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。如果对所有的元素,该函数都返回true,则该方法返回true。

function isEven(num){
    return num % 2 == 0;
}

var nums = [2, 4, 6, 8, 9];
var even = nums.every(isEven);

if(even){
    console.log("所有元素均为偶数!");
}else{
    console.log("并非所有元素都是偶数!");
}

 

13、some()函数也接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回true,该方法就返回true

function isEven(num) {
    return num % 2 == 0;
}

var nums = [2, 4, 6, 8, 9];
var even = nums.some(isEven);

if(even) {
    console.log("有一些元素是偶数!");
} else {
    console.log("所有元素都不是偶数!");
}

 

14、reduce()方法接受一个函数,返回一个值!

该方法会从一个累加值开始,不断对累加值和数组中后续元素调用该函数,直到数组中的最后一个元素,最后返回得到的累加值。

还提供了reduceRight()方法,从右往左执行

如求和:

var numsArr = [1, 2, 3, 4, 5];
var sum = numsArr.reduce(add);
console.log(sum);        //15

var strArr = ['late ', "in ", "autumn "];
var strs1 = strArr.reduce(add);
console.log(strs1);        //late in autumn

var strs2 = strArr.reduceRight(add);
console.log(strs2);        //autumn in late

function add(total, num){
    return total + num;
}

 

15、map():与forEach()方法类似,区别在于map()返回一个新数组,该数组元素是对原有元素应用某个函数得到的结果。

function curve(num){
    return num *= 5;
}

var numsArr1 = [1, 2, 3, 4, 5];
var numsArr2 = numsArr1.map(curve);
console.log(numsArr1);            //[1, 2, 3, 4, 5]
console.log(numsArr2);            //[5, 10, 15, 20, 25]

//对字符串
function first(word){
    return word[0];
}

var words = ["late", "in", "autumn"];
var words2 = words.map(first);
console.log(words2);            //["l", "i", "a"]
console.log(words2.join(""));    //lia 

 

16、filter():与every()方法相似,传入一个返回值为布尔类型的函数,对所有元素应用该函数,该方法返回一个包含返回结果为true的元素的数组

function isEven(num){
    return num % 2 == 0;
}

function isOdd(num){
    return num % 2 != 0;
}

var nums = [1, 2, 3, 4, 5, 6];
var evens = nums.filter(isEven);
console.log(evens);            //[2, 4, 6]

var odds = nums.filter(isOdd);
console.log(odds);             //[1, 3, 5]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值