0

我创建了一个像下面这样的数组,

var array = ['hello', 'hi', 'good morning', 'sweet', 'cool', 'nice', 'hey!', 'how you doin?', 'Thanks!'];

var index = array.indexOf('good morning')//This will return 2 since 'good morning' is located in 2 in index.

我的问题是,如何从“早上好”开始循环数组中的所有 5 个值并以“嘿!”结束?

我知道这可以通过使用 for 循环语句轻松完成,如下所示:

for (x = 2; x<= 6; x++){
} 

但我正在寻找一种不同的方法来实现这一点,只需指定索引值为 2。

4

4 回答 4

4

不知道我明白了,但是要开始迭代good morning并结束于hey!,只需使用字符串的索引作为循环中的开始和结束?

var arr = ['hello', 'hi', 'good morning', 'sweet', 'cool', 'nice', 'hey!', 'how you doin?', 'Thanks!'];

var start = arr.indexOf('good morning'),
    ends  = arr.indexOf('hey!');

for (var i=start; i<ends; i++) {
    console.log(arr[i]);
}

小提琴

你可以用 ? 做类似的事情slice()

arr.slice(arr.indexOf('good morning'), arr.indexOf('hey!')).forEach(function(s) {
    console.log(s)
});

小提琴

于 2013-06-11T20:39:25.240 回答
0

根据您的具体问题,使用内置方法可能是一种更好的方法,但如果您真的想要一个更具有处理程序风格的迭代器,并针对此确切需要量身定制 args,这里有一个如何扩展 Array 原型的示例。

Array.prototype.disToDat = function(dis){
    if(dis===undefined || typeof dis === 'function'){
        throw new Error('No dis. You need dat and deserve to be dissed'); 
    }

    dis = this.indexOf(dis);

    if(typeof arguments[1] === 'function'){
        var dat = this.length - 1; //optional dat - runs to the end without
        var handler = arguments[1];
    }
    else if(typeof arguments[2] === 'function'){
        var dat = this.indexOf(arguments[1]);
        if(dis > dat){ throw new Error('Dat is before dis? What is dis!?'); }

        var handler = arguments[2];
    }
    else{
        throw new Error(
            "You can't handle dis or dis and dat without a handler."
        );
    }


    if(dis === -1 || dat === -1){ return null; }

    for(var i=dis; i<=dat; i++){
        handler(this[i]);
    }
}

用法:

['a','b','c','d','e'].disToDat('b', 'd', function(disOne){ console.log(disOne); });
//dis and dat

['a','b','c','d','e'].disToDat('b', function(disOne){ console.log(disOne); });
//without optional dat, it just goes to the end

引发错误:

- 缺少处理程序

-第一个位置没有'dis'参数

-'dat' 在 'dis' 之前

于 2013-06-11T21:35:46.910 回答
0
for (var x = array.indexOf("good morning"); x < array.indexOf("hey!"); ++x)

但老实说,我看不到它的用途......

于 2013-06-11T20:41:19.153 回答
0
var array = ['hello', 'hi', 'good morning', 'sweet', 'cool', 'nice', 'hey!', 'how you doin?', 'Thanks!'];

startIndex = array.indexOf('good morning');
endIndex = array.indexOf('hey!');

for (x = startIndex; x < endIndex; x++){
    console.log(array[x])
}
于 2013-06-11T20:42:47.283 回答