【问题标题】:Find elements in two JavaScript arrays and store each array with its own different ones在两个 JavaScript 数组中查找元素,并将每个数组与其不同的数组存储起来
【发布时间】:2017-09-29 19:13:47
【问题描述】:

我有一个来自两个数组的联系人列表。一些元素可能相同,但我需要知道哪个数组具有唯一值并将这些唯一值保留在该数组中。换句话说,我想跟踪它们来自哪个数组的唯一值。这是我到目前为止的意大利面条代码:

for (var i = 0; i < emailNews.length; i++)
        {
            for (var j = 0; j < emailHealth.length; j++) 
                {
                    if (emailNews[i] == emailHealth[j]) {
                        $('#userList').append(descriptionNews[i] + '<td><span style="margin-right: 5px;">Advanced</span><input type="checkbox" name="advanced" id="advancedCheck" checked></td><td><button type="button" class="btn btn-danger btn-sm btn-user-delete" id="' + userLogin + '" >Delete</button></td></tr>');
                   } else {
                       console.log(descriptionHealth[j]);
                       $("#userList").append(descriptionHealth[j] + '<td><button type="button" class="btn btn-danger btn-sm" id="deleteEnd">Delete</button></td></tr>');
                    }
                }

        }

【问题讨论】:

  • 是否需要从数组中删除重复元素?
  • 是的,但我需要知道哪些数组包含哪些独特的数组
  • 不确定“哪些数组包含哪些唯一的数组”是什么意思?
  • 两个数组都来自两个电子邮件列表。如果两个列表中都包含特定用户,我需要打印到 HTML。如果不是,那么来自哪个列表的不同值
  • 请添加一些数据和您想要实现的目标。

标签: javascript arrays


【解决方案1】:

您的描述有点令人困惑,但据我了解,您有两个数组,并且您希望知道每个数组中的唯一项(不在另一个数组中的项)。

因此,给定数组 ab,您可以创建两个只保存唯一数组的新数组。

// unique--v---------------------v
var a = ["foo", "bar", "baz", "zing"];

// unique--v
var b = ["oof", "bar", "baz"];

var unique_a = a.filter(item => !b.includes(item));
var unique_b = b.filter(item => !a.includes(item));

console.log("Unique in `a`: %s", JSON.stringify(unique_a));
console.log("Unique in `b`: %s", JSON.stringify(unique_b));

既然您有了自己的独特值,并且知道它们来自哪个数组,您就可以使用这些值做您需要的事情。


如果您想在循环播放时执行此操作,那同样简单。只需获取另一个数组并使用当前项目调用.includes()

a.forEach(item => {
  if (b.includes(item)) {
    // not unique...
  } else {
    // unique
  }
});

如果您需要处理所有项目,以两种方式分离唯一的项目,然后还要处理共享的项目,请创建一个 Set 并对其进行迭代。

for (const item of new Set([...a, ...b])) {
  var in_a = a.includes(item);
  var in_b = b.includes(item);
  if (in_a && in_b) {
    // not unique
  } else if (in_a) {
    // unique to 'a'
  } else {
    // unique to 'b'
  }
}

【讨论】:

    【解决方案2】:

    如果需要从一个或多个数组中删除重复元素,您可以使用$.unique()。将数组设置为对象的属性,并包含唯一标识当前对象的属性

    (() => {
      let arr1 = {
        arr: [2, 2, 3],
        name: "arr1"
      };
    
      let arr2 = {
        arr: [1, 1, 2, 3, 3],
        name: "arr2"
      };
    
      let res;
    
      let user = 1;
    
      if (arr1.arr.indexOf(user) > -1 && arr2.arr.indexOf(user) > -1) {
    
        res = $.unique($.map([arr1.arr, arr2.arr], arr => arr))
    
      } else {
        for (let o of Object.values([arr1, arr2])) {
          if (!o.arr.indexOf(user) > -1) {
            res = o.name + " does not contain " + user;
            break;
          }
        }
      }
    
      console.log(res);
    
    })();
    
    (() => {
      let arr1 = {
        arr: [1, 2, 2, 3],
        name: "arr1"
      };
    
      let arr2 = {
        arr: [1, 1, 2, 3, 3],
        name: "arr2"
      };
    
      let res;
    
      let user = 1;
    
      if (arr1.arr.indexOf(user) > -1 && arr2.arr.indexOf(user) > -1) {
        res = $.unique($.map([arr1.arr, arr2.arr], arr => arr))
    
      } else {
        for (let o of Object.values([arr1, arr2])) {
          if (!o.arr.indexOf(user) > -1) {
            res = o.name + " does not contain " + user;
            break;
          }
        }
      }
    
      console.log(res);
    
    })();
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
    </script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-26
      • 2013-05-28
      • 2013-11-08
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      相关资源
      最近更新 更多