#89 数组去重


  • 0
    administrators

    编写一个函数 unique(arr),返回一个去除数组内重复的元素的数组。例如:

    unique([0, 1, 2, 2, 3, 3, 4]) // => [0, 1, 2, 3, 4]
    unique([0, 1, '1', '1', 2]) // => [0, 1, '1', 2]
    

  • -2

    const unique = (arr) => [...new Set(arr)]


  • 1


    const unique = (arr) => {
     var item = typeof arr[0] === 'undefined' ? [] : [arr[0]];
     for (var i=1; i<arr.length; i++) {
      item.indexOf(arr[i]) === -1 && item.push(arr[i])
     }

     return item;
    }

    不用新特性写法


  • 0

    不使用...运算符,可以如下实现

    const unique = (arr)  => Array.from(new Set(arr))
    

  • 0

    const unique = (arr) => {
    let a = ''
    for (var i = 0; i < arr.length; i ++) {
    a = arr.indexOf(arr[i], i + 1)
    if (a > -1) arr.splice(a, 1)
    }
    return arr
    }

    本地验证可以,但为什么不能通过呢


  • 0

    @wucancheng
    刚才看了一下,不用Array.form()直接用new Set()就能去重,请问Array.form()有什么其他的意义吗?


  • 0

    @湛瞳

    • 题目要求你返回的是一个去重后的数组,所以利用Set去重后,需要把Set转为Array

    • 那么怎么把Set转为Array

    • 使用简洁的扩展运算符...[...new Set()]返回

    • 使用Array.from方法转数组返回


  • 0

    @wucancheng 啊~~要求返回数组啊,谢谢啦


  • 0

    这还有一个骚方法,利用Map的key值唯一:

    const unique = (arr) => {
        const seen = new Map()
        return arr.filter((num) => !seen.has(num) && seen.set(num, 1))
    }
    

    使用对象也是一个道理:

    const unique = (arr) => {
        const tmparr = []
        const tmp = {}
        for (let i = 0, len = arr.length; i < len; i++) {
            if (!tmp.hasOwnProperty(arr[i])) {
                tmp[arr[i]] = 1
                tmparr.push(arr[i])
            }
        }
        return tmparr
    }
    

  • 0

    for(var i =0; i < arr.length; i++){
    for(var j = i+1; j <arr.length;j++){
    if(arr[i] === arr[j]){
    arr.splice(j,1);
    }
    }

    			}
    			return arr

  • 0

    const unique = (arr) => {
    if (Object.prototype.toString.call(arr) !== '[object Array]') return;
    let set = new Set(arr)
    return [...set]
    }


登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待