第二十四天


(题目来源: 前端每日知识3+1)

Javascript题目

题目: 手写数组去重的方法(js)

解题思路

问题解答

Set()方法

  1. // 手写数组去重的方法
  2. function deRepeat() {
  3. return [...new Set(arguments[0])] set方法去重
  4. }
  5. console.log(deRepeat([1, 2, 3, 2, 1, 3, 1, 2, 4, 5, 1, 5, "e", 'w', 'w', 'w', 'w'])); //[1, 2, 3, 4, 5, "e", "w"]

Map()方法

  • Map方法使用new构造一个实例对象后, 在使用set(key, value)方法, 如果对同一个键多次赋值, 后面的值将覆盖前面的值.
  1. // 手写数组去重的方法
  2. function deRepeat() {
  3. let map = new Map(); // 如果对同一个键多次赋值,后面的值将覆盖前面的值。
  4. arguments[0].forEach(item => {
  5. return map.set(item, '')
  6. });
  7. return [...map.keys()];
  8. }
  9. console.log(deRepeat([1, 2, 3, 2, 1, 3, 1, 2, 4, 5, 1, 5, "e", 'w', 'w', 'w', 'w'])); //[1, 2, 3, 4, 5, "e", "w"]

reduce()方法

  1. // 手写数组去重的方法
  2. function deRepeat() {
  3. // [includes方法](https://es6.ruanyifeng.com/#docs/array#%E6%95%B0%E7%BB%84%E5%AE%9E%E4%BE%8B%E7%9A%84-includes)
  4. return arguments[0].reduce((init, pre) => {
  5. if (!init.includes(pre)) {
  6. init.push(pre)
  7. }
  8. return init
  9. // 简写
  10. // return init.includes(pre) ? init : [...init,pre]
  11. }, [])
  12. }
  13. console.log(deRepeat([1, 2, 3, 2, 1, 3, 1, 2, 4, 5, 1, 5, "e", 'w', 'w', 'w', 'w'])); //[1, 2, 3, 4, 5, "e", "w"]

filter方法

  • 思路就是filter是把Array的某些元素过滤掉, 然后返回剩下的元素, 使用indexOf方法就是返回当前元素在数组中第一次出现的索引位置, 条件就是如果与当前的元素索引号相同返回true
  1. // 手写数组去重的方法
  2. function deRepeat() {
  3. return arguments[0].filter((item, index) => arguments[0].indexOf(item) === index)
  4. // return newarr
  5. }
  6. console.log(deRepeat([1, 2, 3, 2, 1, 3, 1, 2, 4, 5, 1, 5, "e", 'w', 'w', 'w', 'w'])); //[1, 2, 3, 4, 5, "e", "w"]

map方法

  • map方法就是对数组中的值进行批量修改, 但是不会改变数组的长度, 返回一个新的数组
  1. // 手写数组去重的方法
  2. function deRepeat() {
  3. return arguments[0].map((item, index) => arguments[0].indexOf(item) === index ? item : "").join("").split('')
  4. }
  5. console.log(deRepeat([1, 2, 3, 2, 1, 3, 1, 2, 4, 5, 1, 5, "e", 'w', 'w', 'w', 'w'])); //[1, 2, 3, 4, 5, "e", "w"]

知识扩展

  • Map(), set()ES6 提供三个新的方法——entries(), keys()和values()——用于遍历数组. 它们都返回一个遍历器对象 可以用for…of循环进行遍历, 唯一的区别是keys()是对键名的遍历、values()是对键值的遍历, entries()是对键值对的遍历.