2016-02-01 33 views
1

callbackPractice uniq應該返回一個數組到所有重複被刪除的回調,但我缺少一些東西。請幫忙。我想刪除重複項並返回結果。我錯過了什麼?

function uniq(collection, fn) { 
    var uniqCollection = collection.filter(function(item, index, self) { 
    return self.indexOf(item) === index; 
    }); 
} 

function uniq(collection, fn) { 
    var obj = {}; 
    var uniqArr = []; 
    for (var key in obj) { 
    uniqArr.push(key); 
    } 
    return fn(uniqArr); 
} 

var names = ['Tyler', 'Cahlan', 'Ryan', 'Colt', 'Tyler', 'Blaine', 'Cahlan']; 
uniq(names, function(uniqArr) { 
    console.log('The new names array with all the duplicate items removed is ', uniqArr); 
}); 
+0

請添加您收到的結果和/或錯誤... – tale852150

+0

你有兩個名爲'uniq'的函數......你也沒有在第二個'uniq()'中使用'collection',而是總是迭代空的'obj'。 ..爲什麼兩個功能? – nem035

回答

0

把你的所有數組值到一個對象,然後列出所有鍵 - 這樣你擺脫所有重複的:

function uniq(arr, cb){ 
    var obj = {}; 
    for (var i in arr) { 
     var v = arr[i]; 
     obj[v] = true; 
    } 

    var uniqArr = Object.keys(obj); 
    (cb || Function.prototype)(uniqArr); 
} 
+0

此方法不穩定(更改順序),並且對於非字符串元素將失敗。 –

0
var uniq = function(arr, cb) { 
     var newArr = []; 
     for (var i = 0; i < arr.length; i++) { 
      var found = undefined; 
      for (var y = 0; y < newArr.length; y++) { 
       if (arr[i] === newArr[y]) { 
        found = true; 
        break; 
       } 
      } 
      if (found !== true) { 
       newArr.push(arr[i]); 
      } 
     } 
     cb(newArr); 
    } 

    var names = ['Tyler', 'Cahlan', 'Ryan', 'Colt', 'Tyler', 'Blaine', 'Cahlan']; 
    uniq(names, function(uniqArr){ 
     console.log('The new names array with all the duplicate items removed is ', uniqArr); 
    });