Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript数组中查找到匹配项之间的索引_Javascript_Arrays_Mapreduce - Fatal编程技术网

在javascript数组中查找到匹配项之间的索引

在javascript数组中查找到匹配项之间的索引,javascript,arrays,mapreduce,Javascript,Arrays,Mapreduce,我有一个数组,比如说: const section = [{type: TYPE_B}, {type: TYPE_A}, {type: TYPE_B}, {type: TYPE_A}, {type: TYPE_A}]; 我想得到第一个元素的索引,它的类型是,下一个元素的类型也是 这就是我所尝试的: const firstMatch = section.reduce((a, b) => { if (a.type === TYPE_A && b.type === TYP

我有一个数组,比如说:

const section = [{type: TYPE_B}, {type: TYPE_A}, {type: TYPE_B}, {type: TYPE_A}, {type: TYPE_A}];
我想得到第一个元素的索引,它的类型是,下一个元素的类型也是

这就是我所尝试的:

const firstMatch = section.reduce((a, b) => {
   if (a.type === TYPE_A && b.type === TYPE_A) {
     return a;
   }
});

但这不起作用,因为它返回所有非匹配的未定义,并且代码在下一次迭代时崩溃。

您可以使用
findIndex

const section=[{type:'type_B'},{type:'type_A'},{type:'type_B'},{type:'type_A'},{type:'type_A'}];
const toFind='TYPE_A';
设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)
您可以使用并检查想要的
类型的前置元素和实际元素

var section=[{type:'type_B'},{type:'type_A'},{type:'type_B'},{type:'type_A'},{type:'type_A'}],
类型='type_A',
index=section.findIndex((o,i,a)=>i&&a[i-1]。type==type&&o.type==type);
控制台日志(索引)
const段=[{
类型:'type_B'
}, {
类型:“类型A”
}, {
类型:'type_B'
}, {
类型:“类型A”
}, {
类型:“类型A”
}];
var first=-1,second=-1;
section.forEach((typeObj,index)=>{
如果(第一个==-1){
if(typeObj.type=='type_A')first=索引;
}
else if(第一个>=0){
if(typeObj.type=='type_A')second=索引;
}
})
if(first>=0&&second>0)console.log(first+1);
else console.log(“未找到”)
const段=[
{type:“type_B”},
{type:“type_A”},
{type:“type_B”},
{type:“type_A”},
{type:“type_A”}
];
对于(变量i=0;i}
如果您真正想要的是找到两个后续
TYPE_A
元素的第一个索引,那么您可以通过以下方式使用
findIndex

section.findIndex((e, idx, arr) => e.type === TYPE_A && arr[idx+1] && arr[idx+1].type === TYPE_A)

这将返回与数组中的下一个元素相同或相等的元素列表

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);
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结果=[];
如果(截面长度>1){
对于(变量i=0;i
在编写您尝试编写的代码之前,您是否花时间了解了
reduce
的实际功能?…为什么结果会是index
3
?根据您的描述,它应该是index
2
。我猜他想找到两个
TYPE\u A
元素中的第一个索引。请添加为什么要得到4或3,或者哪一个值。想要得到什么结果?