(1)javascript数据结构--数组

243 阅读3分钟

数组的标准定义:一个存储元素的线性集合,可以通过索引来获取存储位置,索引通常为数字,用来计算元素之间位置的偏移量。

JS中的数组:是一种特殊对象。

创建数组:

let arr=[],              let arr=[1,2]

let arr=new Array(),     let arr= new Array(1,2)       let arr=new Array(10)

字符串生成数组:split()

let str='javascript array split string';

let arrs=str.split(" ");

console.log(arrs);

["javascript", "array", "split", "string"]

数组复制:浅复制和深复制

浅复制:

let nums=[1,2,3,4];

let arr=nums;

nums[0]=5;

console.log(arr[0])
5

深复制:

function copy(A,B){

    for(let i=0;i<A.length;i++){
    
        B[i]=A[i]
        
    }
}
let nums=[1,2,3,4];

let arr=[]

copy(nums,arr);

nums[0]=5;

console.log(arr[0]);

1

数组查找元素:indexOf(), lastIndexOf()

nums.indexOf(num)

不存在返回-1,存在返回其相对应得索引位置

数组转字符串

let arr=["A","B","C","D"];
let str=arr.join();
console.log(str)
A,B,C,D
let str2=arr.toString()
console.log(str2)
A,B,C,D

已有创建新数组

连接:contact()

A.contact(B); 返回合并之后的新数组

截取:splice()

A.splice(2,2),从索引为2的元素开始,截取长度为2的新数组

数组新增删除元素

push()  unshift()  pop()  shift()

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

unshift() 将元素添加到数组开头

pop()删除末尾元素

shift() 删除开头元素

从中间添加和删除

let arrs[1,2,3,4,5];

let newArr=[6,7]

arrs.splice(3,0,newArr);

arrs.splice(3,2)

数组排序 reverse() sort()

let nums=[1,2,4,3]
nums.reverse();
console.log(nums)
3,4,2,1

nums.sort();
console.log(nums);
1,2,3,4

注意点:

let arr=[1,3,100,2,200];
arr.sort();
console.log(arr)
1,100,2,200,3

sort()是按照字典顺序对元素进行排序的,因此假定元素都是字符串类型,正确的处理方法通常添加一个比大小函数

function compare(num1,num2){
    return num1-num2
}
let arr=[1,3,100,2,200];
arr.sort(compare);

数组的迭代器方法

不生成新数组

forEach()  every()  some()  reduce()  reduceRight()

forEach() 可传递一个函数作为参数,对数组中每个元素使用该函数

function square(num){
    console.log(num*num)
}
let nums=[1,2,3,4];
nums.forEach(square);

every() 接受一个返回值为boolean类型的函数,对数组中每一个元素使用该函数,如果全部元素均返回true,则为true

function isEven(num){
    return num%2==0;
}
let nums=[2,4,6]
let even=num.every(isEven);

some() 和every()一样,区别在于主要有个元素返回为true,则返回结果为true

reduce() 接受函数,返回一个值,通常可和add一起做累加求和,或者做数组元素拼接成字符串

function add(sum,num){
    return sum+num;
}
let nums=[1,2,3,4]
let sum=nums.reduce(add);
console.log(sum) 
10
function concat(str,item){
    return str+item;
}
let strs=['abc','edf','edf'];
let str=strs.reduce(concat);
console.log(str);
abc edf edf

reduceRight()方法是从右向左执行

生成新数组

map() filter()

map()和forEach()类似,区别在于,map()返回一个新的数组。

function add(num){
    return num+1;
}
let nums=[1,2,3,4];
let newNums=nums.map(add);
console.log(newNums)
2,3,4,5

["1",'2','3'].map(Number);可以直接转成数字

filter()和every()的用法类似,区别在于返回的不是boolean值而是一个新数组 可用来作为过滤不必要的数组