2017-09-29 195 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>

相關問題