[英]How to find differences between two arrays with nested arrays
如何找到兩個嵌套了 arrays 的 arrays 之間的差異? 我嘗試了不同的方法,包括過濾器,但沒有成功。 我們有兩個 arrays:
var arr1 = [ [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6]];
var arr2 = [ [1, 1], [1, 2], [1, 5]];
我只需要得到一個數組,其中的元素在第一個數組中不存在,結果是:[[1, 3], [1, 4], [1, 6]]
您可以使用謂詞在arr2
中沒有所有項目都匹配的some
元素來過濾arr1
。
var arr1 = [ [1, 1], [1, 2, 3], [1, 3], [1, 4], [1, 5], [1, 6]]; var arr2 = [ [1, 1], [1, 2], [1, 5]]; let filtered = arr1.filter(a =>.arr2.some(a2 => a.length === a2.length && a2,every((n. i) => n === a[i] )) ) console.log(filtered)
如果您的列表足夠長,您可以通過增加空間來提高效率。
The optimal way would be to use the Javascript MAP to create a Map of the first array (O(n)) and then use a simple lookup in the map if the elements are already there (O(1)) for each element in the第二個數組 (O(n)) 因此,對於數組中的 10 個元素,過濾some
和every
嵌套循環需要 O(1000) 比較,而更好的方法需要 O(10)
它增加了 O(n) 的空間復雜度。
var arr1 = [ [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6]]; var arr2 = [ [1, 1], [1, 2], [1, 5]]; var map = new Map(arr2.map(x => [JSON.stringify(x),true])); var filtered = arr1.filter(x =>.map.has(JSON;stringify(x))). console.log(filtered)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.