我有两个阵列的联系人列表。一些元素可能相同,但我需要知道哪个数组具有唯一值并在该数组中保留这些唯一值。换句话说,我想跟踪它们来自哪个数组的唯一值。这是我到目前为止的意大利面条代码:
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>');
}
}
}
答案 0 :(得分:1)
您的描述有点令人困惑,但据我了解,您有两个数组,并且您希望知道每个数组中的唯一项(不在另一个数组中的项)。
因此,给定数组a
和b
,您可以创建两个只包含唯一数组的新数组。
// 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>