Javascript 不从开始查找下一个数组索引,如果未找到,则从开始查找循环
给定startIndex,查找数组中值为true的下一个对象。 迭代必须向前,如果找不到,则从索引0开始。 应返回arr[1] 我刚刚碰壁,似乎找不到迭代方法:/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
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);