JavaScript数组常用操作多种方案汇总(扁平化,去重等,又是一年金九银十

本文介绍了多种JavaScript数组去重的方法,包括ES6Set、双层循环、额外空间for循环、filter以及排序+双指针。同时提到了前端工程师提升技能的挑战和一份全面的学习资料《2024年Web前端开发全套学习资料》,强调了技术面试中自我认知和双向交流的重要性。
摘要由CSDN通过智能技术生成

定义一个空对象,后续的方法都添加到该对象上。

const _ = {

}

数组去重

======================================================================

问题描述


const arr = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 1, 2]

去除重复数字得到:

[ 0, 1, 2, 3, 4 ]

方案


1. ES6 Set

_.uniqV1 = arr => […new Set(arr)];

或者

_.uniqV1 = arr => Array.from(new Set(arr));

2. 双层for循环

遍历原始数组,发现重复的项则用splice移除。

_.uniqV4 = arr => {

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

for (let j = i + 1; j < arr.length; j++) {

if (arr[i] === arr[j]) {

arr.splice(j, 1);

j–;

}

}

}

return arr;

}

3. for 循环 额外空间

_.uniqV2 = arr => {

const res = [];

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

if (res.indexOf(arr[i]) === -1) {

res.push(arr[i]);

}

}

return res;

}

4. Array.prototype.filter()

filter过滤数组,返回当前元素在原始数组中的第一个索引和当前索引值相等的项即可。

_.uniqV3 = arr => arr.filter((item, index, arr) => {

return arr.indexOf(item, 0) === index;

});

5. 排序 + 双指针

起初快慢指针指向数组头 arr[i] = arr[j] = arr[0]

当arr[i] !== arr[j] 时,i向前移动一位,同时把arr[j] 赋值给 arr[i]

j 向前移动一位

_.uniqV5 = arr => {

arr.sort();

// i 慢指针 j 快指针

let [i, j] = [0, 0];

while (j < arr.length) {

if (arr[j] !== arr[i]) {

i++;

arr[i] = arr[j];

}

j++;

}

return arr.slice(0, i + 1)

}

数组扁平化

=======================================================================

问题描述


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

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

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

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

文末

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。

首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。

前端面试题汇总

JavaScript

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

性能

linux

前端资料汇总

g-blog.csdnimg.cn/img_convert/d7f6750332c78eb27cc606540cdce3b4.png)

linux

前端资料汇总

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值