我有一个像这样的对象数组:
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;
}
}
答案 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;