【超硬核】js 数组 这一篇就够了 ,九千字总结,值得收藏【宝藏级】(1)


整理了好久感觉还是表格清晰,

活在风浪,赢在当下 ~ 
 序号    方法名                      功能              返回值 是否会  改变  原数  组  版本
1    push()(在结尾)向数组添加一或多个元素返回新数组长度YES5
2   unshift()(在开头)向数组添加一或多个元素返回新数组长度YES5
3   pop()删除数组的最后一位返回被删除的数据YES5
4   shift()删除数组的第一项返回被删除的数据YES5
5  reverse()反转数组中的元素返回反转后数组YES5
6  sort()排序返回排序后的新数组YES5
7splice()删除现有元素和/或添加新元素来更改数组的内容。原来的数组:改变返回删除的数据YES5
8slice()

裁切指定位置的数组 

原来的数组:不改变

被裁切的元素形成的新数组NES5
9join()

数组转字符串

返回拼接后的新数组NES5
9.1arr.split()字符串转数组返回拼接后的新数组ES5
10concat()数组连接(合并)返回合并之后的数组NES5
11toString()将数组转换为字符串新数组NES5
12valueOf()查询数组原始值数组的原始值NES5
13indexOf()查询某个元素在数组中第一次出现的位置存在该元素,返回下标,不存在 返回 -1NES5
14lastIdexOf()反向查询数组某个元素在数组中第一次出现的位置存在该元素,返回下标,不存在 返回 -1NES5
15forEach()(迭代) 遍历数组,每次循环中执行传入的回调函数无/(undefined)NES5
16map()(迭代) 遍历数组, 每次循环时执行传入的回调函数,根据回调函数的返回值,生成一个新的数组有/自定义NES5
17filter()过滤数组满足条件的元素组成的新数组NES5
18every()(迭代) 判断数组中所有的元素是否满足某个条件

全部满足返回true,只要有一个不满足就返回false

         N               ES5
19some()(迭代) 判断数组中是否存在,满足某个条件的元素只要有一个元素满足条件就返回true,都不满足返回falseNES5-
20reduce()(归并)遍历数组, 每次循环时执行传入的回调函数,回调函数会返回一个值,将该值作为初始值prev,传入到下一次函数中,我一般用于计算价格 购物车全选 反选最终操作的结果NES5-
21reduceRight()(归并)用法同reduce,只不过是从右向左同reduceES5
22includes()判断一个数组是否包含一个指定的值.是返回 true,否则falseNES6
23Array.from()

接收伪数组,返回对应的真数组,我一般用于去重

Array.from(new Set(arr))

对应的真数组NES6
24find()返回满足条件的第一个元素,不存在返回undefined满足条件第一个元素/否则返回undefinedNES6
25findIndex()返回满足条件的第一个元素下标,不存在返回-1满足条件第一个元素下标,不存在返回-1NES6
26fill()用给定值填充一个数组新数组NES6
27flat()用于将嵌套的数组“拉平”,变成一维的数组。返回一个新数组NES6
29666666666666更新中。。

1 数组长度


  • 中括号里的中括号算一个

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

console.log(arr.length); //4


2 split 字符串转数组


  • 语法:split(‘字符串的分隔符’)

var str = ‘啊,吧,c’ //字符串

var arr66 = str.split(“,”) //字符串转数组方法括号里面是 分隔符

console.log(arr66); //数组

3 join 数组转字符串


  • 语法:数组名.join(“要拼接的符号”)

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

console.log(arr1.join(“-”)); //1-2-3-4-5-6

4 push末尾追加


  • 语法:数组名.push()数组末尾追加 返回的是追加后数组元素长度个数

let arr2 = [“a”, “b”, “c”, “d”];

console.log(arr2.push(“e”, “f”)); //6

5、unshift头部添加


  • 语法:arr.unshift()数组头部追加 返回的是追加后数组元素个数

let arr4 = [“a”, “b”, “c”, “d”];

console.log(arr4.unshift(“aa”)); //5

 6 、pop 末尾删除


  • 语法:arr.pop()数组末尾删除 ,返回值是被删除的元素

let arr3 = [“a”, “b”, “c”, “d”];

console.log(arr3.pop()); //d

7、shift头部删除


  • 语法:shift()数组头部删除  返回值是被删除的元素

let arr5 = [“a”, “b”, “c”, “d”];

console.log(arr5.shift()); //a

8  、sort排序


  • 语法:sort()数组排序 要用return返回出来

let arr6 = [1, 59, 6, 9, 2, 4];

//1,2,4,6,9,59 箭头函数可以省略return只有一行语句时 a-b升序 b-a倒叙

console.log(arr6.sort((a, b) => a - b));

// 上面是简写

//完整写法如下
arr6.sort((c, d) => { //降序
    return d - c
});
console.log(arr6);

9 、reverse()数组反转


let arr7 = [“a”, “b”, “c”, “d”];

console.log(arr7.reverse()); //d c b a

//数组方法可以串联例如, 也可以在data中定义,

//在vue中复杂过重的模板建议写在computed中

computed: {

xx.split(‘’).reverse().join(‘’)

},

10 、slice数组删除(不改变原数组)


  • slice()数组删除或组成新数组 传一个参数是删除几个,两个参数是从开始下标到结束下标之间组成新数组包头不包尾,特点不会改变原数组

let arr8 = [“a”, “b”, “c”, “d”, “e”, “f”];

console.log(arr8.slice(3)); //d e f 一个参数是删除几个

//b c d 两个参数是从开始下标到结束下标之间组成新数组包头不包尾

//括号里默认不写就是从头到尾

console.log(arr8.slice(1, 4));

console.log(arr8); //(6) [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’] 特点不会改变原数组

11 、splice 数组删除(会改变原数组)


// arr.splice(从下标那个位置删除,删除几个元素包含当前元素)

// 会改变原数组

var arr = [‘a’, ‘b’, ‘c’, ‘d’]

arr.splice(1, 2) //删除 b c

console.log(arr); //打印 a d


12 、 arr.filter 过滤数组 要用return返回出来


let arr10 = [1, 2, 4, 5, 6, 7, 8, 9]

let arr11 = arr10.filter(item => {

return item > 5

});

console.log(arr11); // 6 7 8 9

13 、forEach() 数组遍历


  • forEach() 数组遍历 可以传三个参 item index array (每一项,下标,原数组)

let arr12 = [1, 2, 3, 4, 5, 6, 7, 8, 9];

arr12.forEach((item, index, array) => {
     console.log(item); //每一项
      console.log(index); //0 1 2 3 4 5 6 7 8  下标
    console.log(array); //9个数组,每一数组有1 2 3 4 5 6 7 8 9
})


14  、set 去重


var arr14 = [1, 2, 1, 2, 3];

console.log(new Set(arr14)); // 1 2 3


15、  将数组中的字符串拿出来 取出来一种类型


  • 数组中多种类型,将某一类取出来

let arr15 = [1, 2, 3, 4, 5, ‘a’, ‘b’, ‘c’];

let newArr1 = [];

for (i = 0; i < arr15.length; i++) {

// 不是必要循环的内容不要放在for里 定义的新数组不要放在for循环里

// var newArr1 = []; 错误 定义

if (typeof arr15[i] == “string”) {

newArr1.push(arr15[i])

}

};

console.log(newArr1); // ‘a’ ‘b’ ‘c’

16、 去空


let arr16 = [1, 2, , , 3];

let newArr2 = [];

for (i = 0; i < arr16.length; i++) {

//空就是undefined 所以将不是空的拿出来,逆向思维

if (typeof arr16[i] != “undefined”) {

newArr2.push(arr16[i]) //不等于空追加到新数组

}

};

console.log(arr16); //[1, 2, empty × 2, 3]

console.log(newArr2); // 1 2 3


17、xx.concat(n,n) 合并数组


var arr1 = [1, 2, 3];

var arr2 = [“a”, “b”, “c”];

var arr3 = [“A”, “B”, “C”];

var rel = arr1.concat(arr2, arr3);

console.log(arr1); //原数组

console.log(rel); //新数组

18 、数组转字符串 (默认",")


  • 语法:数组名.join(“要拼接的符号”)

var list = [“a”, “b”, “c”, “d”]; // “a-b-c-d”

var result = list.join(“-”); //“a-b-c-d”

var result1 = list.join(“/”); //“a/b/c/d”

var result2 = list.join(“”); //“abcd”

var result3 = list.join(); // a,b,c,d 默认不写就是逗号

console.log(result,result1 ,result2 ,result3 );

20 、arr.toString() 强制转字符串


var list = [“a”, “b”, “c”, “d”];

var rel = list.toString();

console.log(rel); // a,b,c,d (字符串类型)

21 、valueOf(); 返回数组的原始值(一般情况下其实就是数组自身)


var list = [1, 2, 3, 4];

var rel = list.valueOf();

console.log(list); // [1, 2, 3, 4]

console.log(rel); // [1, 2, 3, 4]

22 、arr.indexOf();


  • 查询某个元素在数组中第一次出现的位置 存在该元素,返回下标,不存在 返回 -1

var list = [1, 2, 3, 4];

var index = list.indexOf(4); //3

var index = list.indexOf(“4”); //-1

console.log(index);

23 、arr.map()


  • map 的速度大于forEach。

  • map会返回一个新的数组,不会改变原来的数组,forEach不会返回新数组,会改变原数组

var list = [32, 93, 77, 53, 38, 87];

var res = list.map(function (item, index, array) {

return item + 10;

});

console.log(“原数组”, list);

console.log(“新数组”, res);

24 arr.find();


  • 返回满足条件的第一个元素,不存在则返回undefined参数

var list = [505, 686, 77, 48, 99, 100];

var index = list.find(function(item, index, array) {

console.log(item, index, array);

return item > 800;

});

console.log(index); //undefined 找到返回元素,找不到返回undefined

25 、arr.fill 数组填充


  • 语法:arr.fill(‘要填充的值’,从下标哪里开始,到下标那里结束)

  • 特点:包头不包尾,下标开始,下标结束这两个值相同数组不会有变化

  • 结束下标长度超出数组长度按照最大数组长度填充,

let v = [“1”, “2”, “3”];

let a = v.fill(“填充的值”, 1, 1);

console.log(a); // [‘1’, ‘2’, ‘3’]后面两个值相同数组不会有变化,

let v1 = [“a”, “b”, “c”];

let a1 = v1.fill(“填充的值”, 2, 5);

console.log(a1); // [‘a’, ‘b’, ‘填充的值’]

// 结束下标长度超出数组长度按照最大数组长度填充,

//例如这里填充结束下标是5, 数组长度不够用, 则按照数组最大长度填充

let v2 = [“a”, “b”, “c”, “d”, “e”];

let a2 = v2.fill(“填充的值”, 1, 2);

console.log(a2); // [‘a’, ‘填充的值’, ‘c’, ‘d’, ‘e’] 包头不包尾

26、数组扁平   arr.flat(num/Infinity);


  • 用于将嵌套的数组"拉平",变成一维的数组。该方法返回一个新数组,对原数据没有影响。

  • 注意 默认拉平一次 如果想自定义拉平此处 需要手动传参 ,如果想全都拉平 传 Infinity

第一种:

var list = [1, 2, [3, 4, [5], 6, [7, 8, [66, 77]]]];

var arr = list.flat(); // 默认拉平一次

console.log(“拉平一次”, arr);

var arr = list.flat(2); // 拉平2次

console.log(“拉平两次”, arr);

// 小括号里写几拉平几次,infinity全部拉平

var arr = list.flat(Infinity);

console.log(“全部拉平”, arr);

第二种:

var list = [1, 2, [3, 4, [5], 6, [7, 8, [66, 77]]]];

// 第一步 toString()转为一维字符串

var newList = list.toString();

console.log(newList); // 1,2,3,4,5,6,7,8,66,77

// 第二步 转为数组

var arr = newList.split(“,”)

console.log(arr); //[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘66’, ‘77’]

// 第三步 用map循环将每一项转为数值型,

list = arr.map(v => Number(v))

console.log(list); // [1, 2, 3, 4, 5, 6, 7, 8, 66, 77]

// 以上方法合写

list = list.toString().split(‘,’).map(v => Number(v))

console.log(list); // [1, 2, 3, 4, 5, 6, 7, 8, 66, 77]

27 、求最大值最小值


// 求最大值最小值 第一种:

const array = [5, 4, 7, 8, 9, 2];

let num = array.reduce((a, b) => a > b ? a : b);

console.log(‘最大值:’, num)   // 输出: 9

let num1 = array.reduce((a, b) => a < b ? a : b);

console.log(‘最小值:’, num1)   // 输出: 2

// 求最大值最小值 第二种:

let sortArr = [5, 4, 7, 8, 9, 2];

sortArr = sortArr.sort((a, b) => {

return a - b

})

console.log(sortArr); // 2, 4, 5, 7, 8, 9]

console.log(‘最大值:’, sortArr[sortArr.length - 1]); // 9

console.log(‘最小值:’, sortArr[0]); // 2

28 、计算字符串每个字符出现次数


let string = ‘zzzkkl’;

const obj = {};

for (let key of string) {

// key 是键, obj[key]是value,因为这是字符串所以打印value是undefined

// console.log(key); //key

console.log(obj[key]); //value,没有value所以undefined

obj[key] = obj[key] + 1 || 1;

}

console.log(obj) //{z: 3, k: 2, l: 1}

29、出现次数最多的元素为


let arr2 = [1, 1, 1, 2, 3, 4, 5];

findMost(arr2);

console.log(findMost(arr2));

function findMost(arr2) {

if (!arr2.length) return;

if (arr2.length === 1) return 1;

let res = {};

let maxName, maxNum = 0

// 遍历数组

arr2.forEach((item) => {

res[item] ? res[item] += 1 : res[item] = 1

if (res[item] > maxNum) {

maxName = item

maxNum = res[item]

}

})

return ‘出现次数最多的元素为:’ + maxName + ‘, 出现次数为:’ + maxNum;

};

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
ndMost(arr2) {

if (!arr2.length) return;

if (arr2.length === 1) return 1;

let res = {};

let maxName, maxNum = 0

// 遍历数组

arr2.forEach((item) => {

res[item] ? res[item] += 1 : res[item] = 1

if (res[item] > maxNum) {

maxName = item

maxNum = res[item]

}

})

return ‘出现次数最多的元素为:’ + maxName + ‘, 出现次数为:’ + maxNum;

};

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-zXXbquUp-1715796528653)]

[外链图片转存中…(img-QKYqGq6d-1715796528653)]

[外链图片转存中…(img-fuC6JvU3-1715796528653)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值