比较对象数组并返回对象的索引

时间:2018-05-10 19:42:31

标签: javascript arrays object

我有这个对象数组:

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

基本上我试图写一个对撞机。我希望返回x和y值彼此相等的对象索引,我该如何处理?

3 个答案:

答案 0 :(得分:0)

你可以编写一个函数,通过map迭代数组,并根据这个条件(x === y)返回索引或null,然后过滤它,只返回那些与null不同的函数

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

工作小提琴: https://jsfiddle.net/c3qqmh3b/

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用哈希表来检查重复项:

const hash = {};

for(const {x, y} of array) {
  if(hash[x + "|" + y]) 
    alert("collides");
  hash[x + "|" + y] = true;
}