JS数组

129 阅读4分钟

JS数组

1.创建一个数组,数组中可以存放任意类型的数据,例如字符串,数字,布尔等
    let arr = [1,2,3];
    let arr = new Array(1,2,3); // A要大写
    let arr = new Array(3); //只有一个参数时候length长度为3

2.转化为数组
    let arr = '1,2,3'.split(',') // 以逗号为分割成为一个数组
    let arr = '123'.split('') // 以空字符串形式分割成为一个数组
    let arr = Array.from('abc') // 需要满足(是否有0,1,2等下标,是否有length属性)有就可以尝试变成数组

3.把伪数组变成数组

伪数组:如果一个数组的原型链中没有那些数组所共有的属性,那么这个数组就是伪数组(没有数组共用属性的数组就是伪数组)

    let divList = document.getElementsByTagName('div');
    let arrDiv = Array.from(divList);
    console.log(arrDiv);
4.arr1.concat(arr2)合并数组
    let arr1 = [1,2,3];
    let arr2 = [4,5,6];
    let arr3 = arr1.concat(arr2); // 得出来是新的一个数组,不会改变原来数组

5.slice()截取数组
    let arr1 = [1,2,3,4,5,6];
    let arr2 = arr1.slice(2); // 从第三个元素开始。=> [3,4,5,6] 会得到一个新的数组,不会改变原来数组
    let arr3 = arr1.slice(0); // 截取整个数组(复制数组) => [1,2,3,4,5,6]
    let arr4 = arr1.slice(2,5) // => [3,4,5] 从索引2到索引5(不包括索引5)

数组的增删改查

数组是一种特殊的对象,对象怎么删,数组就怎么删

删(修改原数组)

let arr = [1,2,3,4,5];
delete arr[0];
console.log(arr); // [empty,2,3,4,5],数组的长度并没有变
let arr = [1,2,3]
arr.length = 1; 
console.log(arr); // [1],直接改length长度也可以删,但是不要随便改length

不推荐用以上方法删,用下面的方法删

1.删除头部元素
    arr.shift() // arr被修改,并返回被删元素

2.删除尾部元素
    arr.pop() // arr被修改,并返回被删元素

3.删除中间的元素
    arr.splice(index,num) // index从第几个开始,num删除多少个
    arr.splice(index,num,x,y) index从第几个开始,num删除多少个,添加x,y上去

查看元素

  let arr = [1,2,3,4,5];
       arr.x = 'xxx';
1.查看所有属性名
        Object.keys(arr); // 键名
        Object.values(arr); // 键值
        
        for(let key in arr){
            console.log(`${key} : ${arr[key]}`)  // for...in 不仅会遍历数组所有的数字键,还会遍历非数字键
        }

2.查看数字属性名和值
        for(let i = 0;i < arr.length;i++){
                console.log(`${i} : ${arr[i]}`)  // 遍历数字键
        }

        arr.forEach(function(key,value){
                console.log(`${key} : ${value}`)
        })

3.查找某个元素是否在数组里
        arr.indexOf(3); 存在返回索引,不存在返回-1

4.使用条件查找元素
        arr.find(function(x){   // find元素找到满足条件的即停止,返回那个值
            return x % 2 === 0
        });

5.使用条件查找元素的索引
        arr.findIndex(function(x){  // findIndex元素找到满足条件的即停止,返回索引
            return x % 2 === 0
        })

增加数组中的元素(修改原数组)

  let arr = [1,2,3,4,5];
  
1.在尾部加元素
    arr.push(newItem) // 修改arr,返回新长度
    arr.push(item1,item2) // 修改arr,返回新长度

2.在头部加元素
    arr.unshift(newItem) // 修改arr,返回新长度
    arr.unshift(item1,item2) // 修改arr,返回新长度
    
3.在中间添加元素

   arr.splice(index,0,'x'); // 在index中插入'x'
   arr.splice(index,0,'x','y'); // 在index中插入'x','y'

数组中排序(修改原数组)

反转顺序

let arr = [1,2,3,4,5]
arr.reverse() // [5,4,3,2,1] 

自定义顺序:arr.sort((a,b)=>a-b)

 let arr = [{name:'小明', score:98},
            {name:'小红', score:94},
            {name:'小刚', score:91}];

       //  1.a减b的值是正数则是从小到大排序,负数则从大到小排序
      // 2.a和b是arr里面随机一项,一直会比较完

        arr.sort(function(a,b){
            return a.score - b.score;
        });
console.log(arr); 

// 打印结果

(3) [{…}, {…}, {…}]
0: {name: "小刚", score: 91}
1: {name: "小红", score: 94}
2: {name: "小明", score: 98}
length: 3
__proto__: Array(0)

数组变换

let arr = [1,2,3,4,5,6];

1.map()方法创建一个新数组,其结果是该数组中的每一个元素都调用一个提供函数后返回结果
        arr.map(function(item,index,arr){
            return item * item
        });

2.filter()方法,是true就返回,否则就筛选掉
        arr.filter(function(item,index,arr){
            return item % 2 === 0;
        });

3.reduce()方法
        1.initial代表初始值(可以设置任意自己想要的数据类型)
        2.item是数组中的值,从下标0开始
        arr.reduce(function(initial,item){
                return  "自己想要的东西"
        },initial);

        案例1
        arr.reduce(function(sum,item){
                return sum+item
        },0)

        案例2
        arr.reduce(function(result,item){
                return result.concat(item*item);
        },[]);

面试题

let arr = [
    { 名称: "动物", id: 1, parent: null },
    { 名称: "狗", id: 2, parent: 1 },
    { 名称: "猫", id: 3, parent: 1 }
  ];

  变成
    {
    id : 1,
    名称 : '动物',
    children : [
    {id:2,名称:'狗',children:null},
    {id:3,名称:'猫',children:null}
    ]
    }