JavaScript获取所有匹配的邻居

时间:2017-07-01 21:01:44

标签: javascript

我有一个像这样的对象数组:

const arr = [{
  label: [1,1]
},
{
  label: [1,0.5]
},
{
  label: [1,0.5]
}
,{
  label: [1,0.5]
}
,{
  label: [1,1]
}]

然后我有一个索引值,比如值2。这将对应于:

{
  label: [1,0.5]
}

现在,我想基于标签值找到旁边的所有索引或对象。我进行比较的方式是label.join(',') ===,这对此很好。

在此示例数组中,将提供2的索引之前和之后的一个。

我可以迭代,但不确定如何在"之前或之后,特别是因为之前或之后可能有很多。

最终结果很好:

const index = 3;
const first = _.first(arr, index).reverse()
const rest = _.rest(arr, index + 1)
let found = []

for (let i = 0; first.length; i++) {
    if (first[i].label.join(',') == arr[index].label.join(',')) {
    found.push(first[i])
  } else {
    break;
  }
}

for (let i = 0; rest.length; i++) {
    if (rest[i].label.join(',') == arr[index].label.join(',')) {
    found.push(rest[i])
  } else {
    break;
  }
}

1 个答案:

答案 0 :(得分:0)

使用从给定索引开始并在数组中前进和后退的循环。

在循环之后,您需要调整找到的索引,因为它在找到不匹配的元素时结束。



const array = [{
    label: [1, 1]
  },
  {
    label: [1, 0.5]
  },
  {
    label: [1, 0.5]
  }, {
    label: [1, 0.5]
  }, {
    label: [1, 1]
  }
];

const n = 2;
const label = array[n].label;
var start = n;
var end = n;
if (n > 0) {
  for (start = n - 1; start >= 0; start--) {
    if (array[start].label[0] != label[0] || array[start].label[1] != label[1]) {
      break;
    }
  }
  start++;
}
if (n < array.length - 1) {
  for (end = n + 1; end < array.length; end++) {
    if (array[end].label[0] != label[0] || array[end].label[1] != label[1]) {
      break;
    }
  }
  end--;
}
console.log(start, end);
&#13;
&#13;
&#13;