Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 - Fatal编程技术网

Javascript 不从开始查找下一个数组索引,如果未找到,则从开始查找循环

Javascript 不从开始查找下一个数组索引,如果未找到,则从开始查找循环,javascript,arrays,Javascript,Arrays,给定startIndex,查找数组中值为true的下一个对象。 迭代必须向前,如果找不到,则从索引0开始。 应返回arr[1] 我刚刚碰壁,似乎找不到迭代方法:/ const arr = [{item:'a', value:false}, {item:'b', value:true}, {item:'c', value:true}, {item:'d', value:false}]; const startIndex = 2; let result={}; 对于(设i=startIndex+1

给定startIndex,查找数组中值为true的下一个对象。 迭代必须向前,如果找不到,则从索引0开始。 应返回arr[1]

我刚刚碰壁,似乎找不到迭代方法:/

const arr = [{item:'a', value:false}, {item:'b', value:true}, {item:'c', value:true}, {item:'d', value:false}];
const startIndex = 2;
let result={};
对于(设i=startIndex+1;i
我不确定自己是否理解。但是

getNext=函数(startIndex,arr){
var i;
对于(i=startIndex;i
我不确定自己是否理解。但是

getNext=函数(startIndex,arr){
var i;
对于(i=startIndex;i
您可以使用单个循环,并将
startIndex
作为偏移量,然后使用长度的余数对索引进行整形

const
数组=[{item:'a',value:false},{item:'b',value:true},{item:'c',value:true},{item:'d',value:false}],
startIndex=3;
让结果;
for(设i=startIndex;i控制台日志(结果)
您可以使用单个循环,并将
startIndex
作为偏移量,然后使用长度的余数对索引进行整形

const
数组=[{item:'a',value:false},{item:'b',value:true},{item:'c',value:true},{item:'d',value:false}],
startIndex=3;
让结果;
for(设i=startIndex;i控制台日志(结果)您可以使用
.splice
创建两半:

  • 首先,在后半部分搜索
    value=true
    的元素,如果找到,请记住将第一个元素的长度添加到
    索引中
  • 如果在第二部分中未找到,请在第一部分中搜索
const getElementAtIndexFromStart=(arr=[],startIndex=0)=>{
//从startIndex开始获取元素的索引(如果存在)
让index=arr.slice(startIndex+1).findIndex(({value})=>value==true);
如果(索引!=-1){
//如果找到,则向其添加起始索引以表示arr中的位置
索引=索引+开始索引+1;
}否则{
//如果在下半部分中未找到,请在第一部分中搜索
index=arr.slice(0,startIndex+1).findIndex(({value})=>value==true);
}
返回arr[索引];
}
const arr=[{item:'a',value:false},{item:'b',value:true},{item:'c',value:true},{item:'d',value:false}];
log('Start:0=>',getElementAtIndexFromStart(arr,0));
log('Start:1=>',getElementAtIndexFromStart(arr,1));
log('Start:2=>',getElementAtIndexFromStart(arr,2));
log('Start:3=>',getElementAtIndexFromStart(arr,3));

log('Start:5=>',getElementAtIndexFromStart(arr,5))您可以使用
.splice
创建两半:

  • 首先,在后半部分搜索
    value=true
    的元素,如果找到,请记住将第一个元素的长度添加到
    索引中
  • 如果在第二部分中未找到,请在第一部分中搜索
const getElementAtIndexFromStart=(arr=[],startIndex=0)=>{
//从startIndex开始获取元素的索引(如果存在)
让index=arr.slice(startIndex+1).findIndex(({value})=>value==true);
如果(索引!=-1){
//如果找到,则向其添加起始索引以表示arr中的位置
索引=索引+开始索引+1;
}否则{
//如果在下半部分中未找到,请在第一部分中搜索
index=arr.slice(0,startIndex+1).findIndex(({value})=>value==true);
}
返回arr[索引];
}
const arr=[{item:'a',value:false},{item:'b',value:true},{item:'c',value:true},{item:'d',value:false}];
log('Start:0=>',getElementAtIndexFromStart(arr,0));
log('Start:1=>',getElementAtIndexFromStart(arr,1));
log('Start:2=>',getElementAtIndexFromStart(arr,2));
log('Start:3=>',getElementAtIndexFromStart(arr,3));


log('Start:5=>',getElementAtIndexFromStart(arr,5))有一个名为
indexOf
的函数,它有两个参数。。。看up@Akxe,这仅适用于相同的对象引用。提示:您没有检查
属性,也没有断开if found if found当我到达终点时如何从起点开始。为循环指定只需使用2个循环:第一个循环从
startIndex+1
向前,如果未找到,则从0开始第二个循环到
startIndex
。为什么希望它是1个循环?有一个名为
indexOf
的函数,它需要2个参数。。。看up@Akxe,这仅适用于相同的对象引用。提示:您没有检查
属性,也没有断开if found if found当我到达终点时如何从起点开始。为循环指定只需使用2个循环:第一个循环从
startIndex+1
向前,如果未找到,则从0开始第二个循环到
startIndex
。你为什么希望它是1圈?这很有效!但是您有一个错误,“i>arr.length”应该是“ilet result = {}; for (let i = startIndex + 1; i < arr.length; i++) { if (!arr[i] && i < arr.length) { result = arr[i]; } } console.log(result);