在JavaScript中搜索数组中的子数组

在JavaScript中搜索数组中的子数组,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我有一个对象数组: arrObj : [{ id: 0, text: 'At', start: '15.000' }, { id: 1, text: 'the', start: '15.492'}, { id: 2, text: 'left', start: '15.984'}, { id: 3, text: 'we', start: '16.476' }, { id: 4, text: 'can', start: '16.967'},

我有一个对象数组:

arrObj : [{ id: 0, text: 'At', start: '15.000' },
      { id: 1, text: 'the', start: '15.492'},
      { id: 2, text: 'left', start: '15.984'},
      { id: 3, text: 'we', start: '16.476' },
      { id: 4, text: 'can', start: '16.967'},
      { id: 5, text: 'see...', start: '17.459' },
      { id: 6, text: 'At', start: '18.166'},
      { id: 7, text: 'the', start: '18.440' }]
我必须搜索一个数组并返回起始和结束单词ID。例如,在这种情况下:

["At", "the"]
我必须返回[(0,1)、(6,7)] 我目前正在使用for-each循环遍历arrObj,看看单词是否匹配。我还通过连接对象文本尝试了indexOf,但它返回的是字符索引而不是数组索引


但这似乎并不有效。如何有效地搜索类似的内容?

您可以使用reduce获取阵列中的起始位置和结束位置:

let arrObj=[{id:0,文本:'At',开始:'15.000'},
{id:1,文本:'the',开头:'15.492'},
{id:2,文本:'left',开始:'15.984'},
{id:3,文本:'we',开始:'16.476'},
{id:4,文本:'can',开始:'16.967'},
{id:5,文本:'see…',开头:'17.459'},
{id:6,文本:'At',开始:'18.166'},
{id:7,文本:'the',开头:'18.440'}];
设arr=[“At”,“the”];
让res=arrObj.reduce((a,b,i)=>{
让索引=arr.indexOf(b.text);
如果(索引==0){
a、 推(i);
}else if(索引===1){
a、 推动([a.pop()].concat(i));
}
返回a;
}, []);

控制台日志(res)您可以使用reduce获取阵列中的起始和结束位置:

let arrObj=[{id:0,文本:'At',开始:'15.000'},
{id:1,文本:'the',开头:'15.492'},
{id:2,文本:'left',开始:'15.984'},
{id:3,文本:'we',开始:'16.476'},
{id:4,文本:'can',开始:'16.967'},
{id:5,文本:'see…',开头:'17.459'},
{id:6,文本:'At',开始:'18.166'},
{id:7,文本:'the',开头:'18.440'}];
设arr=[“At”,“the”];
让res=arrObj.reduce((a,b,i)=>{
让索引=arr.indexOf(b.text);
如果(索引==0){
a、 推(i);
}else if(索引===1){
a、 推动([a.pop()].concat(i));
}
返回a;
}, []);

控制台日志(res)搜索数组任意长度的解决方案。它存储搜索数组的索引,并以匹配项递增

如果找到了搜索数组中所有项的索引,则只添加一个带有索引的数组

var数组=[{id:0,text:'At',start:'15.000'},{id:1,text:'the',start:'15.492'},{id:2,text:'left',start:'15.984'},{id:3,text:'we',start:'16.476'},{id:4,text:'can',start:'16.967'},{id:5,text:'see…,start:'17.459'},{id:6,text:'At',start:'18.166'},start:',
搜索=[“在”,“在”],
结果=数组.reduce(函数(i,t){
返回函数(r、a、j){
if(搜索[i]==a.text){
t、 推(j);
i++;
if(i==search.length){
r、 推(t);
t=[];
i=0;
};
}
返回r;
};
}(0, []), []);
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
用于搜索数组任意长度的解决方案。它存储搜索数组的索引,并以匹配项递增

如果找到了搜索数组中所有项的索引,则只添加一个带有索引的数组

var数组=[{id:0,text:'At',start:'15.000'},{id:1,text:'the',start:'15.492'},{id:2,text:'left',start:'15.984'},{id:3,text:'we',start:'16.476'},{id:4,text:'can',start:'16.967'},{id:5,text:'see…,start:'17.459'},{id:6,text:'At',start:'18.166'},start:',
搜索=[“在”,“在”],
结果=数组.reduce(函数(i,t){
返回函数(r、a、j){
if(搜索[i]==a.text){
t、 推(j);
i++;
if(i==search.length){
r、 推(t);
t=[];
i=0;
};
}
返回r;
};
}(0, []), []);
控制台日志(结果)

。作为控制台包装{最大高度:100%!重要;顶部:0;}
仍然模糊。多解释!请阅读。关键短语:“搜索、研究”和“解释……任何阻碍您自己解决问题的困难”。查看或是否针对最新的浏览器。我们至少需要知道您想要什么样的输出来帮助您。听起来好像您正在尝试为
文本
删除具有相同值的对象。这就是你想做的吗?还是很模糊。多解释!请阅读。关键短语:“搜索、研究”和“解释……任何阻碍您自己解决问题的困难”。查看或是否针对最新的浏览器。我们至少需要知道您想要什么样的输出来帮助您。听起来好像您正在尝试为
文本
删除具有相同值的对象。这就是你想要做的吗?第二个代码段的输出不应该是
[[0,1,2]]
而不是
[[0,1,2],[6,7]]
?我不这么认为,它似乎解决了OP的问题。没有指定是否应该排除部分匹配,第二个代码段只是为了完成,我想第一个代码段更适合这个问题@Rickhitchcock第二个代码片段的输出不应该是
[[0,1,2]]
而不是
[[0,1,2],[6,7]]
?我不这么认为,它似乎解决了OP的问题。没有指定是否应该排除部分匹配,第二个代码段只是为了完成,我想第一个代码段更适合这个问题@里奇科克