数组API之常用方法

数组API之常用方法

数组初步认识

数组是特殊的对象,所以typeof arr 一定是 'object'

看到的都是属性的值,键key就是从0开始逐级递增,还有天生自带length属性

会改变原有数组的:增删改

push

返回值:新增后数组的长度,即数组的新length值

参数:(elem1, elem2, ...)

let arr=[23,56,78,36,36,78,23,11,89,78,78];
console.log(arr.push(66,77,88,99))
console.log(arr);
console.log(arr.unshift(11,22,33))
console.log(arr);

用原生js也能增加

arr[arr.length] = 88;

unshift

在数组开头加

let arr=[23,56,78,36,36,78,23,11,89,78,78];


console.log(arr.unshift(11,22,33))
console.log(arr);
// 基于es6方式:展开运算符
arr=[100,200,300,...arr];
console.log(arr);

基于es6的方式:arr=[100, ...arr];

shift

删除第一个

返回值:删除的那个元素

let arr=[23,56,78,36,36,78,23,11,89,78,78];


console.log(arr.shift())
console.log(arr);
[start,...arr]=arr
console.log(arr);

注意:

不要用delete arr[0],因为length不会改变

pop

删除最后一个

返回值:被删除的那个元素

let arr=[23,56,78,36,36,78,23,11,89,78,78];


console.log(arr.pop())
console.log(arr);
arr.length--;
console.log(arr);

splice万能的

返回值:删除的元素组成的数组

修改:把原来的删除,然后用新东西占据

数组的查询和拼接

slice

截取:[start, end)

有个技巧:数组的克隆 arr.slice(0)

但是要注意,这个是浅克隆

concat

数组拼接

arr.concat()

toString

join

连接成字符串

let arr=[23,56,78,36,36,78,23,11,89,78,78];


console.log(arr.splice(0,0,10002))
console.log(arr);


console.log(eval(arr.join('+')));


5a4fb6fe47e2cddbc5b66143ea0640e9.png

indexOf / lastIndexOf / includes

数组中是否包含某一项;若不包含则返回 -1

017c85759bbd6f385ae3d266f37c4554.png排列和排序

reverse

把数组倒过来排列

sort

排序

a,b是相邻的两项,待排序的2个元素:

a是数组中后面的元素,即1号位置;

b是数组中前面的元素,即0号位置;

sort( ( a, b) => a-b; )

技巧:

所以看到 a-b、a>b,是升序;

看到b-a、a<b,是降序;

这几个例子很有趣:

let arr=[23,56,78,36,11,34,66,77,77];
const students = [
  { name: "Alex",   grade: 23 },
  { name: "Devlin", grade: 56 },
  { name: "Eagle",  grade: 78 },
  { name: "Sam",    grade: 36 },
  { name: "Sam1",    grade: 11 },
  { name: "Sam2",    grade: 34 },
  { name: "Sam3",    grade: 66 },
  { name: "Sam4",    grade: 77 },
  { name: "Sam5",    grade: 77 },
];
const grades = [
  { name: "Alex",   grade: 23 },
  { name: "Devlin", grade: 56 },
  { name: "Alice1", grade:  null},
  { name: "Eagle",  grade: 78 },
  { name: "Sam",    grade: 36 },
  { name: "Sam1",    grade: 11 },
  { name: "Sam2",    grade: 34 },
  { name: "Alice2", grade:  null},
  { name: "Sam3",    grade: 66 },
  { name: "Sam4",    grade: 77 },
  { name: "Alice3", grade:  null},
  { name: "Sam5",    grade: 77 },
];
arr.sort((a,b)=>{
    // console.log('-----');
    // console.log(a);
    // console.log(b);
    return +(a<b) || -1;
})
console.log(arr);
students.sort((a,b)=>{
    return +(a.grade<b.grade) || -1;
    // return +(a.grade<=b.grade) || -1;
    // return +(a.grade<b.grade) || +(a.grade===b.grade)||-1;


})
console.log(students);
grades.sort((a,b)=>{
    // return b.grade-a.grade;
    if(a.grade>b.grade) return -1;
    if(a.grade===b.grade) return 0;
    return 1;
})
console.log(grades);


// 需要被排序的数组
var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];
// 对需要排序的数字和位置的临时存储
var mapped = list.map(function(el, i) {
  return { index: i, value: el.toLowerCase() };
})
// 按照多个值排序数组
mapped.sort(function(a, b) {
  return +(a.value > b.value) || +(a.value === b.value) - 1;
});
// 根据索引得到排序的结果
var result = mapped.map(function(el){
  return list[el.index];
});
console.log(result);

遍历

forEach

数组中有多少项,forEach就会被执行多少次

8f5cf8039fdb1c38b8efbb5186a0f0ff.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值