在两个JavaScript数组中查找元素,并使用自己的不同数组存储每个数组

时间:2017-09-29 19:13:48

标签: javascript arrays

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

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

        }

2 个答案:

答案 0 :(得分: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'
  }
}

答案 1 :(得分:1)

如果要求从一个或多个阵列中删除重复元素,则可以使用$.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>