Как получить непревзойденное значение массива из массива в JavaScript с минимальной сложностью? - PullRequest
0 голосов
/ 27 декабря 2018

Привет, я новичок в java-скрипте. Мне нужно решение для приведенного ниже сценария.У меня есть многомерный массив координат

var coordinateArr = [ [[45.56,45.57],[44.36,44.37]],
                      [[42.26,42.37],[42.46,42.57]],
                      [[41.56,41.57],[41.36,41.37],[41.26,41.27]] 
                    ];

, и у меня есть другой многомерный массив, такой как

var  anotherArr = [ [[41.56,41.57],[41.36,41.37],[41.26,41.27]], 
                     [[42.26,42.37],[42.46,42.57]]
                  ]; 

Теперь я хочу извлечь несопоставленное значение из координат координаты, как

var unmatchedArr= [[[45.56,45.57],[44.36,44.37]]];

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Javascript выполняет сравнение массивов по ссылке, поэтому вы не можете просто проверить, находится ли массив из одной группы в другой, если они не являются одним и тем же объектом.Вам нужно либо протестировать каждое значение, либо преобразовать массив во что-то, что сравнивается по значению, как строка.Для массивов вы можете использовать JSON.stringify.Если вы сделаете Set из anotherArr, вы сможете сравнить filter с Set.has()

var coordinateArr = [ [[45.56,45.57],[44.36,44.37]],
                      [[42.26,42.37],[42.46,42.57]],
                      [[41.56,41.57],[41.36,41.37],[41.26,41.27]] 
                    ];

var  anotherArr = [ [[41.56,41.57],[41.36,41.37],[41.26,41.27]], 
                     [[42.26,42.37],[42.46,42.57]]
                  ]; 

let keys = new Set(anotherArr.map(JSON.stringify))
let filtered = coordinateArr.filter(arr => !keys.has(JSON.stringify(arr)))

console.log(filtered)
0 голосов
/ 27 декабря 2018

Попробуйте filter выделить элементы массива, которые не include d в другом массиве:

var coordinateArr = [
  [
    [45.56, 45.57],
    [44.36, 44.37]
  ],
  [
    [42.26, 42.37],
    [42.46, 42.57]
  ],
  [
    [41.56, 41.57],
    [41.36, 41.37],
    [41.26, 41.27]
  ]
];

var anotherArr = [
  [
    [41.56, 41.57],
    [41.36, 41.37],
    [41.26, 41.27]
  ],
  [
    [42.26, 42.37],
    [42.46, 42.57]
  ]
];

var unmatchedArr = coordinateArr.filter(e => !anotherArr.includes(e));
console.log(unmatchedArr);
...