【问题标题】:jQuery: How to compare two arrays with multiple values in each index and remove the duplicatejQuery:如何比较每个索引中具有多个值的两个数组并删除重复项
【发布时间】:2015-07-13 07:44:11
【问题描述】:

我真的不知道该怎么做。我想删除具有多个值的数组的重复值。我尝试使用这篇文章Compare arrays with jQuery [duplicate] 中的代码,但没有得到我想要的结果。请帮我解决这个问题。

var arr1 = ["1,2,3", "4,5", "6", "7,8", "9,10"];
var arr2 = ["2", "4", "7,8"];
var result = []; //expected output: Array["1,3","5","6","9,10"]

$.each(arr1, function(i, val) {
  if ($.inArray(val, arr2) < 0)
    result.push(val);
});
console.log(result);
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

【问题讨论】:

  • 在两个数组上,您是否自愿忘记了逗号之间的双引号或arr1[](例如)应该像"1","2","3","4","5"...
  • 不,先生,我本来是这样想的。该数组将在每个索引中有多个值,以逗号分隔。然后使用.split()我可以将每个索引的值变成一个数组。
  • 在您的示例中,如果arr2 也包含“1”,您会期望什么结果? (如果两个不同的 arr2 项目出现在一个字符串中,它们都被删除了吗?)如果它不包含“2”,但包含“1,3”怎么办? (如果 arr2 有一个项目,其中两个数字用逗号分隔,它们是否必须彼此相邻才能删除,或者在字符串中的任何位置出现?)

标签: javascript jquery arrays


【解决方案1】:

如果性能不是一个大问题,这将满足您的需求:

var arr1   = ["1,2,3", "4,5", "6", "7,8", "9,10"]
var arr2   = ["2", "4", "7,8"].join(',').split(',');
var result = [];

$.each(arr1, function(i, val) {
  var values   = val.split(',');
  var filtered = [];
  $.each(values, function (i, value) {
    if ($.inArray(value, arr2) === -1) {
      filtered.push(value);
    }
  });

  if (filtered.length) result.push(filtered.join(','));
});

【讨论】:

    【解决方案2】:

    首先,您必须将每个数字字符串拆分,并将它们作为整数添加到数组中。

    之后,您可能希望使用哈希映射之类的东西来有效地获取数组的交集。 This 示例应该可以完成这项工作。

    这是一个简单的例子。当然,您还需要拆分 arr2 + 将其值添加到 intersectMap

    intersectMap = {}
    for (i = 0; i < arr.length; i++) {
        var values = arr[1].split(",")
        // add these values to a hash map
        for (j = 0; j < values.length; j++) {
            intersectMap[values[j]] = values[j]
        }
    }
    

    您基本上会想要遍历您刚刚创建的每个数组(使用正确拆分的字符串),将它们添加到哈希映射 (intersectMap),并在完成后将所有键添加到新数组。这将保证您在最有效的时间内得到一组唯一值。

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 2012-01-31
      • 2020-11-03
      • 2023-03-09
      • 1970-01-01
      • 2013-10-11
      • 2016-07-06
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多