arr.filter(item => obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true))
5、Array.reduce + Array.includes
reduce() 方法:接收一个函数作为累加器,数组中的每个值从左到右开始计算,最终计算为一个值。
语法:arr.reduce(function(total, currValue, currIndex, arr), initValue)
reduce() 对于空数组是不会执行回调函数的。
total:必需。初始值, 或者计算结束后的返回值
currValue:必需。当前元素
currIndex:可选。当前元素的索引
arr :可选。当前数组对象。
initValue:可选。累加器初始值
一个空数组调用reduce()方法且沒有提供初始值,会报错。
一个空数组调用reduce()方法且提供了初始值,将直接返回该初始值,不會调用 callback 函数。
非空数组调用reduce()提供初始值,则total将会等于初始值,且 currValue从第一个元素开始;若沒有提供初始值,则 total 会等于的第一个元素值,且 currValue将会从第二个元素开始。
let newArr = arr.reduce((accu, cur) => { return accu.includes(cur) ? accu : accu.concat(cur); // 1. 拼接方法 // return accu.includes(cur) ? accu : […accu, cur]; // 2. 扩展运算}, []);
// [1, 2, 4, null, “3”, “abc”, 3, 5]
6、Array.indexOf
indexOf() 方法:返回数组中某个指定的元素位置。该方法遍历数组,查找有无对应元素并返回元素第一次出现的索引,未找到指定元素则返回 -1。
let newArr = []for (var i = 0; i < arr.length; i++) { if (newArr.indexOf(arr[i]) === -1) newArr.push(arr[i]) }
//等同于 forEach 写法arr.forEach( item => newArr.indexOf(item) === -1 ? newArr.push(item) : ‘’)
console.log(newArr) // [1, 2, 4, null, “3”, “abc”, 3, 5]
7、 Array.includes
includes() 方法:用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
let newArr = []
for (var i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) newArr.push(arr[i])
}
//等同于 forEach 写法
arr.forEach( item => !newArr.includes(item) ? newArr.push(item) : ‘’)
console.log(newArr) // [1, 2, 4, null, “3”, “abc”, 3, 5]
8、 new Set + 扩展运算符 || Array.from
ES6 提供了新的数据结构 Set。类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,可以接受一个具有 iterable 接口数据结构作为参数(如数组,字符串),用来初始化。
let newArr = […new Set(arr)]; // [1, 2, 4, null, “3”, “abc”, 3, 5]
let newArr = Array.from(new Set(arr)); // [1, 2, 4, null, “3”, “abc”, 3, 5]
let newStr = […new Set(‘ababbc’)].join(‘’) // ‘abc’
9、new Map
ES6 提供了新的数据结构 Map 。类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。
get方法读取key对应的键值,如果找不到key,返回undefined。
has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
let map = new Map();let newStr = [];
for (let i = 0; i < arr.length; i++) { if (!map.has(arr[i])) { map.set(arr[i], true); newStr.push(arr[i]); }}console.log(newArr) // [1, 2, 4, null, “3”, “abc”, 3, 5]
原文:www.cnblogs.com/echoyya/p/14555831.html
推荐阅读
END
关注下方「前端开发博客」,回复 “加群”
加入500人前端群
❤️ 看完两件事
如果你觉得这篇内容对你挺有启发,我想邀请你帮我两个小忙:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后:
总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。
面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。
总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。
面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。