Сравнить массив объектов и вернуть индекс объекта - PullRequest
0 голосов
/ 10 мая 2018

У меня есть этот массив объектов:

[
{x: 615, y: 293, a: 1},
{x: 340, y: 439, a: 0},
{x: 292, y: 505, a: 0}
]

По сути, я пытаюсь написать коллайдер.Я хотел бы вернуть индексы объектов, значения x и y которых равны друг другу, как мне подойти к этому?

Ответы [ 3 ]

0 голосов
/ 10 мая 2018
var indexes = myArray.reduce((idxs, el, i) => {
  if (el.x === el.y) {
    return idxs.concat(i);
  } else {
    return idxs;
  }
}, []);

Если ваш myArray будет, например:

myArray = [
  {x: 615, y: 293, a: 1},
  {x: 340, y: 340, a: 0},
  {x: 292, y: 505, a: 0}
]

тогда вы получите [1] в результате (потому что элемент индекса 1 имеет x===y)

0 голосов
/ 10 мая 2018

Вы можете просто использовать хеш-таблицу для проверки на наличие дубликатов:

const hash = {};

for(const {x, y} of array) {
  if(hash[x + "|" + y]) 
    alert("collides");
  hash[x + "|" + y] = true;
}
0 голосов
/ 10 мая 2018

Вы можете написать функцию, которая выполняет итерацию по карте, через массив и возвращает индекс или нуль в зависимости от этого условия (x === y), а затем фильтрует его, возвращая только те, которые отличаются от нуля

const collider = array => 
   array.map( (item, index) => item.x === item.y ? index : null )
        .filter( item => item !== null)

Рабочая скрипка: https://jsfiddle.net/c3qqmh3b/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...