【问题标题】:Unique elements of JavaScript 2D array. If there are duplicates, how to remove them all?JavaScript 2D 数组的唯一元素。如果有重复,如何将它们全部删除?
【发布时间】:2016-05-25 10:13:37
【问题描述】:

我有一个名为 user_list 的数组,看起来像这样:

[[user3, 12], [user2, 10], [user1, 5], [user5, 5], [user4, 4]]

第一列包含用户名,第二列包含余额。我已经按余额对它们进行了排序,现在我必须删除所有具有相同余额的行并将具有不同余额的用户添加到名为 unique_user_list 的新数组中。

所以,预期的结果是:

[[user3, 12], [user2, 10], [user4, 4]]

这是我的循环(不起作用)。

for(var i = 0; i<user_list.length; i++) {
    var unique = user_list[i][1];
    for(var j = 1; j<user_list.length; j++) {
        if(unique!=user_list[j][1]) {
            unique_user_list[i] = user_list[i][0];
        }
    }
}

【问题讨论】:

  • 你可以拼接原始数组中的元素吗?我觉得这样做会更简单。
  • @KevinWang:你能不能说得更具体一些或者给我举个例子?我对 JavaScript 完全陌生。
  • 有一种方法可以从数组中删除元素,通过这种方法,您可以从 user_list 中删除所有具有重复余额的元素。

标签: javascript arrays multidimensional-array duplicates


【解决方案1】:

可能有更好的方法来做到这一点,但你可以让它像这样工作:

function getUnique() {
  var unique_user_list = [];
  for (var i = 0; i < user_list.length; i++) {
    var unique = user_list[i][1];
    var match = false;
    for (var j = 0; j < user_list.length; j++) {
      if (unique == user_list[j][1] && j != i) {
        match = true;
      }
    }
    if (!match) {
      unique_user_list.push(user_list[i]);
    }
  }
  return unique_user_list;
}

您要确保 j != i,因此您不会检查值是否等于自身。出于同样的原因,您想在外部循环中推送到输出数组。

https://jsfiddle.net/sco_tt/w704p6kt/

【讨论】:

    【解决方案2】:

    此解决方案具有Array#filter(),仅用于通过单个循环过滤余额。

    var data = [['user3', 12], ['user2', 10], ['user1', 5], ['user5', 5], ['user4', 4]],
        lastBalance,
        filtered = data.filter(function (a, i, aa) {
            if (i + 1 < aa.length && a[1] === aa[i + 1][1]) {
                lastBalance = a[1];
                return false;
            }
            return a[1] !== lastBalance;
        });
    
    document.write('<pre>' + JSON.stringify(filtered, 0, 4) + '</pre>');

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 2017-11-21
      • 1970-01-01
      相关资源
      最近更新 更多