[英]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.