一、数组

1、创建和初始化数组

var arr = new Array();  //新建一个空数组
var arr1 = new Array(7);    //新建一个长度为7的空数组
var arr2 = new Array('1','2','3');  //新建一个包含了1,2,3三项的数组
var arr3 = [];  //新建一个空数组
var arr4 = ['1','2','3']    //新建一个包含了1,2,3三项的数组

  访问数组

console.log(arr4[1])//通过使用中括号传递相应的位置,就可以看到相应数组的元素值。注意这里面传递的是下标,数组的下标是从0开始而不是1,所以arr4[1]的结果是2而不是1

2、添加元素

  2.1、添加元素到数组的末尾

arr.push(1);    //添加1到数组arr中,此时arr=[1]
arr.push(2,3,4) //添加2,3,4到数组arr中,此次arr=[1,2,3,4]

  2.2、添加元素到数组的首位

arr.unshift(0)  //添加0到数组arr中,此时arr=[0,1,2,3,4]
arr.unshift(-2,-1)  //添加-2,-1到数组中,此时arr=[-2,-1,0,1,2,3,4]

3、删除元素

  3.1、删除数组结尾的元素

arr.pop()   //此时arr=[-2,-1,0,1,2,3]

  3.2、删除数组开头的元素

arr.shift() //此时arr=[-1,0,1,2,3]

 

  3.3、在任意位置添加或删除元素

//splice(index,deletnumber,addelement)接受三个参数,第一个是数组的下标位置,第二个是删除元素的个数,第三个是添加的元素
arr.splice(2,2)//此时arr=[-1,0,3]
arr.splice(2,0,1,2)//此时arr=[-1,0,1,2,3]

 

4、二维和多维数组

//JavaScript只支持一维数组,不支持矩阵(二维数组),我们可以用数组嵌套的方式来实现一维或多维数组
var arr = [];
arr[0] = [1,2,3,4,5]
arr[1] = [6,7,8,9,10]
//或以下写法
arr[0] = [];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[0][3] = 4;
arr[1] = [];
arr[1][0] = 5;
arr[1][1] = 6;
arr[1][2] = 7;
arr[1][3] = 8;

 

5、数组的其他方法

  5.1、合并数组

var arr = [];
var arr1 = [1,2,3];
var arr2 = [4,5,6];
//  concat方法可以向一个数组传递数组、对象或是元素。数组会按照该方法传入的参数顺序连接指定数组。
arr = arr.concat(arr1,arr2);   //arr=[1,2,3,4,5,6]
console.log(arr);

   5.2、迭代数组的元素

    5.2.1、every方法迭代

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
//every方法会迭代数组中的每个元素,直到返回false。
var isEven = function (x) {
    console.log(x)
    return (x < 8) ? true : false;
}
arr.every(isEven)

    5.2.2、some方式迭代

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
//every方法会迭代数组中的每个元素,直到返回true。
var isEven = function (x) {
    console.log(x)
    return (x < 8) ? true : false;
}
arr.some(isEven)

    5.2.3、forEach方法迭代

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
//迭代整个数组,返回各种判断的结果
arr.forEach(function (x) {
    console.log(x > 7)
})
//箭头函数简化:
arr.forEach(x => {
    console.log(x > 7)
})

    5.2.4、map和filter方法

      1)map

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var isEven = function (x) {
    console.log(x)
    return (x < 8) ? true : false;
}
var arrMap = arr.map(isEven);
//arrMap:[true, true, true, true, true, true, true, true, false, false]

       2)filter

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var isEven = function (x) {
    console.log(x)
    return (x < 8) ? true : false;
}
var arrMap = arr.filter(isEven);
console.log(arrMap)
//arrMap:[0, 1, 2, 3, 4, 5, 6, 7],它返回的新数组由使函数返回true的元素组

    5.2.5、reduce方法

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
//reduce方法接收一个函数作为参数,这个函数有四个参数:previousValue、currentValue、index和array。这个函数会返回一个将被叠加到累加器的值,reduce方法停止执行后会返回这个累加器。
var num = arr.reduce(function(previous, current, index){
    return previous + current; 
    });
//num = 45

     5.2.6、for...of循环迭代

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for (let n of num) {
    console.log((n % 2 == 0) ? 'even' : 'odd')
}

    5.2.7、ES6新迭代器(@@iterator)

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let n = num[Symbol.iterator]();
for (let i = 0; i < num.length; i++) {
    console.log(n.next().value);
}

      不断调用迭代器next()方法,就能依次得到数组中的值。数组所有值都迭代完之后,n.next().value会返回undefined。

      5.2.7.1、entries、keys和values方法

        1)entries方法返回包含键值对的@@iterator。

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let n = num.entries(); //得到键值对的迭代器
for (let i = 0; i < num.length; i++) {
console.log(n.next().value); //例如:[0,1]、[1,2]...
}

        num数组中都是数字,key是数组中的位置,value是保存在数组索引的值。

        2)keys方法返回包含数组索引的@@iterator。

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let n = num.keys();  //得到数组索引的迭代器
for (let i = 0; i < num.length; i++) {
    console.log(n.next());    //例如:{value:1,done:false}、{value:2,done:false}...
}

        keys方法会返回numbers数组的索引。一旦没有可迭代的值,aKeys.next()就会返回一个value属性为undefined,done属性为true的对象。如果done属性的值为false,就意味着还

有可迭代的值。

        3)value方法返回的@@iterator则包含数组的值。代码为@@iterator介绍时的代码。

      5.2.8、from方法

        Array.from方法根据已有的数组创建一个新数组。

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let newNum = Array.from(num, x => (x % 2 == 0));
let newNums = Array.from(num);
console.log(newNums);   //[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(newNum);    //[false, true, false, true, false, true, false, true, false]

      5.2.9、Array.of方法

        Array.of方法根据传入的参数创建一个新数组。

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let n1 = Array.of(1); // [1]
let n2 = Array.of(...num)   //[1, 2, 3, 4, 5, 6, 7, 8, 9],展开操作符(...)会把num数组里的值都展开成参数。

      5.2.10、fill方法

        fill方法用静态值填充数组。

let num1 = new Array(6);
num1.fill(1);   // [1, 1, 1, 1, 1, 1]
num1.fill(2,1); //[1, 2, 2, 2, 2, 2],从1开始所有的值为2
num1.fill(1,3,5);   //[1, 2, 2, 1, 1, 2],把1填充到数组索引3到5的位置(不包括5)
let num2 = Array(5).fill(1);    //可以复合使用

      5.2.11、copyWithin方法

        copyWIthin方法复制数组中的一系列元素到同一数组指定的起始位置。

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9];
num.copyWithin(0,4) //[5, 6, 7, 8, 9, 6, 7, 8, 9],从位置4开始的值付给0以后的值
num = [1, 2, 3, 4, 5, 6, 7, 8, 9];
num.copyWithin(1,3,5)   //[1, 4, 5, 4, 5, 6, 7, 8, 9],把位置3和4(不包含5)的值复制到位置1和2

 

6、数组排序

  6.0、翻转数组

var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.reverse()); //[9, 8, 7, 6, 5, 4, 3, 2, 1]

  6.1、自定义排序

var ifm = [{
    name: 'a',
    age: 30
}, {
    name: 'b',
    age: 15
}, {
    name: 'c',
    age: 20
}];
function count(a,b) {
    if(a.age<b.age){
        return -1
    }else if (a.age>b.age){
        return 1
    }
    return 0
}
console.log(ifm.sort(count));   // {name: "b", age: 15}{name: "c", age: 20}{name: "a", age: 30}

  6.2、字符串排序

var arr = ['A','J','B','b','a','j'];
console.log(arr.sort()) // ["A", "B", "J", "a", "b", "j"],这个方法是根据ASCII值进行比较
function count(a,b) {
    if(a.toLowerCase() < b.toLowerCase()){
        return -1
    }else if(a.toLowerCase() > b.toLowerCase()){
        return 1
    }
    return 0
}
console.log(arr.sort(count))    //["A", "a", "B", "b", "J", "j"]
var arrs = ['ab','ac','aa'];
function count1(a,b) {  
    return a.localeCompare(b)
}
console.log(arrs.sort(count1))  // ["aa", "ab", "ac"]

 

7、搜索

    7.1、indexOf()和lastIndexOf()

    indexOf返回与参数匹配的第一个元素的索引,lastIndexOf返回与参数匹配的最后一个元素的索引。

var arr = [1,2,3,4,5,6,7,8,9,8,7,6];
console.log(arr.indexOf(6));    //5
console.log(arr.lastIndexOf(6));    //11
//找不到元素返回-1

    7.2、find和findIndex

    find和findIndex方法接受一个回调函数,搜索一个满足回调函数条件的值。

var arr = [1,2,3,4,5,6,7,8,9,8,7,6];
function count(ele,i,arr) {
    return (ele > 7)? true: false;
}
console.log(arr.find(count));    //8,返回第一个满足条件的值
console.log(arr.findIndex(count));   //7,返回第一个满足条件值的下标

    7.3、includes方法

    如果数组存在某个元素,includes方法会返回true,否则返回false。

var arr = [1,2,3,4,5,6,7,8,9,8,7,6];
console.log(arr.includes(7));    //true
console.log(arr.includes(6,7));   //true,从下标6的位置开始搜索

 

8、输出数组为字符串,toString和join

var arr = [1,2,3,4,5,6,7,8,9,8,7,6];
console.log(arr.toString());    //1,2,3,4,5,6,7,8,9,8,7,6
console.log(arr.join('&'));    //1&2&3&4&5&6&7&8&9&8&7&6,以&号做分割的字符串。

 

  

 

posted @ 2018-11-29 17:54  道鼎金刚  阅读(120)  评论(0)    收藏  举报