我有一个数组,让我们说:
const section = [{type: TYPE_B}, {type: TYPE_A}, {type: TYPE_B}, {type: TYPE_A}, {type: TYPE_A}];
我想用TYPE_A获取第一个元素的索引,其中下一个元素也是TYPE_A
这是我试过的:
const firstMatch = section.reduce((a, b) => {
if (a.type === TYPE_A && b.type === TYPE_A) {
return a;
}
});
这不起作用,因为它为所有非匹配返回undefined,并且代码在下一次迭代时崩溃。
答案 0 :(得分:3)
您可以使用findIndex
const section = [{type: 'TYPE_B'}, {type: 'TYPE_A'}, {type: 'TYPE_B'}, {type: 'TYPE_A'}, {type: 'TYPE_A'}];
const toFind = 'TYPE_A';
let idx = section.findIndex((o, i, a) => a[i - 1] && a[i - 1].type === toFind && a[i + 1] && a[i + 1].type === toFind && o.type !== toFind);
console.log(idx);

答案 1 :(得分:1)
const section = [
{type: "TYPE_B"},
{type: "TYPE_A"},
{type: "TYPE_B"},
{type: "TYPE_A"},
{type: "TYPE_A"}
];
for (var i = 0; i < section.length - 1; i++) {
if (section[i].type == "TYPE_A" && section[i + 1].type == "TYPE_A") {
console.log(i);
}
}
注意:我在TYPE_A
和TYPE_B
的每个出现时都添加了引号。如果这些是变量,请删除引号。我将它们保留在这里是因为如果解释器将它们视为变量(它们未定义),它们将返回错误。
答案 2 :(得分:1)
如果您真正想要的是找到两个后续TYPE_A
元素的第一个索引,那么您可以通过以下方式使用findIndex
:
section.findIndex((e, idx, arr) => e.type === TYPE_A && arr[idx+1] && arr[idx+1].type === TYPE_A)
答案 3 :(得分:0)
您可以使用Array#findIndex
并检查所需的type
的前任和实际元素。
var section = [{ type: 'TYPE_B' }, { type: 'TYPE_A' }, { type: 'TYPE_B' }, { type: 'TYPE_A' }, { type: 'TYPE_A' }],
type = 'TYPE_A',
index = section.findIndex((o, i, a) => i && a[i - 1].type === type && o.type === type);
console.log(index);
答案 4 :(得分:0)
const section = [{
type: 'TYPE_B'
}, {
type: 'TYPE_A'
}, {
type: 'TYPE_B'
}, {
type: 'TYPE_A'
}, {
type: 'TYPE_A'
}];
var first=-1,second=-1;
section.forEach((typeObj,index)=>{
if(first===-1){
if(typeObj.type==='TYPE_A') first=index;
}
else if(first>=0){
if(typeObj.type==='TYPE_A') second=index;
}
})
if(first>=0 && second>0) console.log(first+1);
else console.log("not found")
答案 5 :(得分:0)
这将返回一个与数组中下一个元素相同的元素列表。
var TYPE_A = {"a":"a"};
var TYPE_B = {"b":"b"};
const section = [{type: TYPE_B}, {type: TYPE_A}, {type: TYPE_B}, {type: TYPE_A}, {type: TYPE_A}];
var results = [];
if (section.length > 1) {
for(var i = 0; i < section.length -1;i++){
if(section[i].type == section[i+1].type){
results.push(i);
}
}
}
console.log(results);