【问题标题】:I am trying to remove the duplicates and return the result. What am I missing?我正在尝试删除重复项并返回结果。我错过了什么?
【发布时间】:2016-02-01 19:40:58
【问题描述】:

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);
});

【问题讨论】:

  • 请添加您收到的结果和/或错误...
  • 您有 两个 名为 uniq 的函数...您也没有在第二个 uniq() 内使用 collection,而是始终遍历空的 obj . .. 为什么有两个函数?

标签: javascript arraylist callback


【解决方案1】:

将所有数组值放入一个对象,然后列出所有键 - 这样您就可以摆脱所有重复项:

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);
}

【讨论】:

  • 这种方法不稳定(更改顺序),对于非字符串元素会失败。
【解决方案2】:
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);
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-19
    • 2017-12-27
    • 1970-01-01
    • 2020-07-18
    • 2022-01-24
    • 1970-01-01
    • 2018-05-27
    • 2018-12-22
    相关资源
    最近更新 更多