2017-09-29 198 views
0

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

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

是要求从数组中删除重复的元素的属性? – guest271314

+0

是的,但我需要知道哪些数组包含哪些唯一的数组 – azmatrix

+0

不确定您的意思是“哪些数组包含哪些唯一的数组”? – guest271314

回答

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

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

相关问题