jquery 从小段数组中筛选段数组

2lpgd968  于 2023-03-17  发布在  jQuery
关注(0)|答案(2)|浏览(113)
let big_coordinates_arr  =[ [1,2],[3,4],[5,8],[7,9]] ;
let small_coordinates_arr=[ [3,4],[7,9] ] ;

let is_same = (arr1,arr2) => arr1.length == arr2.length && arr1.every(function(element, index) {
    return element === arr2[index]; 
});

let result = big_coordinates_arr.filter(c1 => !small_coordinates_arr.some(c2 => is_same(c1,c2)))
console.log(result)
let big_coordinates_arr  =[ [[1,2],[3,4]], [[3,4],[1,2]] , [[5,8],[7,9]] , [[7,1],[6,5]] , [3,6],[7,3] ] ;
let small_coordinates_arr=[ [[3,4],[1,2]] , [[7,1],[6,5]] ] ;
Expected output should be [  [[5,8],[7,9]] , [3,6],[7,3] ]

该代码段显示了从另一个坐标数组筛选坐标数组的输出。
我的问题是从一个片段数组中过滤另一个片段数组,在我的例子中,我有一个[[1,2],[3,4]],它代表一个片段(2个点),这意味着[[1,2],[3,4]][[3,4],[1,2]]可以假设是相同的,因为你可以互换这2个点,仍然形成相同的片段。
请问怎样才能达到预期的产量?
我真的会很感激我能得到的任何帮助:)

wljmcqd8

wljmcqd81#

通过对数组及其所有嵌套数组进行排序,您将能够获得预期的输出,

let bigArr = [[[1, 2], [3, 4]], [[3, 4], [1, 2]], [[5, 8], [7, 9]], [[7, 1], [6, 5]], [3, 6], [7, 3]];
let smallArr = [[[3, 4], [1, 2]], [[7, 1], [6, 5]]];

function isSame(a, b) {
  for (let i = 0; i < a.length; i++) {
    if (Array.isArray(a[i]) && Array.isArray(b[i])) {
      if (!isSame(a[i], b[i])) return false;
    } else if (a[i] !== b[i]) {
      return false;
    }
  }
  return true;
}

function sameElems(arr1, arr2) {
  let sortedArr1 = arr1.map(x => (Array.isArray(x) ? x.slice().sort() : x)).sort();
  let sortedArr2 = arr2.map(x => (Array.isArray(x) ? x.slice().sort() : x)).sort();
  return isSame(sortedArr1, sortedArr2);
}

let result = bigArr.filter(bigCoords => {
  return !smallArr.some(smallCoords => sameElems(bigCoords, smallCoords));
});

console.log(result);
ef1yzkbh

ef1yzkbh2#

我已经做了多次测试,然后在我得到下面的响应.

function isSame(seg1, seg2) {
  return (
    (seg1[0][0] === seg2[0][0] && seg1[0][1] === seg2[0][1] && seg1[1][0] === seg2[1][0] && seg1[1][1] === seg2[1][1]) ||
    (seg1[0][0] === seg2[1][0] && seg1[0][1] === seg2[1][1] && seg1[1][0] === seg2[0][0] && seg1[1][1] === seg2[0][1])
  );
}

let big_coordinates_arr = [[[1,2],[3,4]], [[3,4],[1,2]] , [[5,8],[7,9]] , [[7,1],[6,5]] , [3,6],[7,3]];
let small_coordinates_arr = [[[3,4],[1,2]] , [[7,1],[6,5]]];

let result = big_coordinates_arr.filter(seg1 => !small_coordinates_arr.some(seg2 => isSame(seg1, seg2)));

console.log(result);

希望你能得到答复。

相关问题