Javascript 如何在不使用for循环的情况下迭代数组的一部分

Javascript 如何在不使用for循环的情况下迭代数组的一部分,javascript,arrays,jslint,Javascript,Arrays,Jslint,我一直在对一些代码运行JSLint,并处理它引发的一些问题。其中之一是 意外的“为” 代码必须处理数组的不同子集,这取决于用户的要求。作为一个例子,我们可能有 myArray = [1,2,3,4,5,6,7,8,9]; let start = 4; let finish = 8; let i; for (i=start; i<finish;i++) { // Do stuff with myArray[4] to myArray[7] } myArray=[1,2,3,4,5,

我一直在对一些代码运行JSLint,并处理它引发的一些问题。其中之一是

意外的“为”

代码必须处理数组的不同子集,这取决于用户的要求。作为一个例子,我们可能有

myArray = [1,2,3,4,5,6,7,8,9];
let start = 4;
let finish = 8;
let i;
for (i=start; i<finish;i++) {
    // Do stuff with myArray[4] to myArray[7]
}
myArray=[1,2,3,4,5,6,7,8,9];
让start=4;
让finish=8;
让我;

对于(i=start;i你可以用
完成同样的事情,而
也很容易

myArray = [1,2,3,4,5,6,7,8,9];
let start = 4;
let finish = 8;
let i = start;
while (i < finish) {
  // Do stuff with myArray[4] to myArray[7]
  i++;
}
myArray=[1,2,3,4,5,6,7,8,9];
让start=4;
让finish=8;
让我开始;
而(我<完成){
//从myArray[4]到myArray[7]进行操作
i++;
}

你可以用
完成同样的事情,而
也非常容易

myArray = [1,2,3,4,5,6,7,8,9];
let start = 4;
let finish = 8;
let i = start;
while (i < finish) {
  // Do stuff with myArray[4] to myArray[7]
  i++;
}
myArray=[1,2,3,4,5,6,7,8,9];
让start=4;
让finish=8;
让我开始;
而(我<完成){
//从myArray[4]到myArray[7]进行操作
i++;
}

伙计,这是因为你举起了“我”

var myArray=[1,2,3,4,5,6,7,8,9];
让start=4;
让finish=8;
用于(开始;开始<完成;开始++){
console.log(启动);

}
伙计,这是因为你举起了“我”

var myArray=[1,2,3,4,5,6,7,8,9];
让start=4;
让finish=8;
用于(开始;开始<完成;开始++){
console.log(启动);
}
您可以使用

myArray.slice(start, finish).forEach(el => {
    …
});
遵守JSlint的规则。

您可以使用

myArray.slice(start, finish).forEach(el => {
    …
});


遵守JSlint的规则。

如果要迭代数组并导致副作用,请检查。@Mark我想到了,但是array.forEach()总是迭代整个数组。我可以在函数内部进行过滤,但这似乎很违反直觉。@Airsick,你可以使用类似的方法来获得所需的精确范围。@Mark我知道Bergi已经提出了这一建议。查看我对他的回答的评论查看你是否想迭代数组并产生副作用。@Mark我想到了但是Array.forEach()总是迭代整个数组。我可以在函数内部进行过滤,但这似乎真的违反直觉。@Airsick,你可以使用类似的方法来获得所需的精确范围。@Mark我知道Bergi已经提出了确切的建议。请看我对他的回答的评论,这不是重点。我的问题不是关于示例的细节,而是为什么和how在没有“for”循环的情况下获得相同的结果。@Airsick你问,“JSLint对这种构造有什么反对意见?”。此外,有太多的方法可以重复,任何答案对于这样一个开放式问题都是有意义的。我只是通过JSLint运行了这段代码。它提出了同样的反对意见,所以不管是什么原因,它与提升I无关。好吧,那么使用一个效率较低的循环,我相信js lint会感谢您的遵从性。这不是重点。我的问题不是关于示例的细节,而是为什么以及如何在没有“for”循环的情况下实现相同的结果。@Airsick您问,“JSLint反对这种构造是什么?”。此外,有太多的方法可以重复,任何答案对于这样一个开放式问题都是有意义的。我只是通过JSLint运行了这段代码。它提出了同样的反对意见,所以不管是什么原因,它与提升I无关。好吧,那么使用一个效率较低的循环,我相信js lint会感谢您的遵从性。严格来说,这不是“for”循环,所以我认为它是合格的,但一朵玫瑰的任何其他名称…如果我在下个月阅读此代码,我的第一个想法将是“我为什么这样做?”这就是评论的目的;)严格来说,这不是一个“for”循环,所以我认为它是合格的,但玫瑰的任何其他名称。。。如果我下个月读到这段代码,我的第一个想法是‘为什么我要这么做?’,这就是评论的目的;)我可以看出,这将满足Douglas Crockford消除循环的愿望,但我会关注性能。如果源阵列很大,而切片的数量级相似,这将如何执行?对于小于数千个元素的数组,会有任何显著的区别吗?请不要将我的回答理解为对JSlint规则的认可,或者建议使用此代码-如果您选择遵循规则,它只显示了遵守规则的方法。就我个人而言,我甚至持有完全相反的观点——当你真的需要一个命令式循环时,应该使用循环构造来突出它,而不是将它隐藏在
forEach
调用中。但是不,我不会担心性能,任何循环都是
O(n)
,切片并不会让它变得更糟。(当然,
for
循环比
.forEach
更快)我发现JSLint在某些方面很有用,但我发现它的迂腐有时令人讨厌,尽管道格拉斯·克罗克福德有一些有用的想法,但我发现它们有时充其量也有局限性。我曾考虑过.slice()方法,但认为必须有一种更直观的方法。为此,我将继续使用几十年来一直为我服务的结构。感谢您的输入。我可以看出这将满足Douglas Crockford消除循环的愿望,但我会关心性能。如果源阵列很大,而切片的数量级相似,这将如何执行?对于小于数千个元素的数组,会有任何显著的区别吗?请不要将我的回答理解为对JSlint规则的认可,或者建议使用此代码-如果您选择遵循规则,它只显示了遵守规则的方法。就我个人而言,我甚至持有完全相反的观点——当你真的需要一个命令式循环时,应该使用循环构造来突出它,而不是将它隐藏在
forEach
调用中。但是不,我不会担心性能,任何循环都是
O(n)
,切片并不会让它变得更糟。(当然,
for
循环比
.forEach
更快)我发现JSLint在某些方面很有用,但我发现它的迂腐有时令人讨厌,尽管道格拉斯·克罗克福德有一些有用的想法,但我发现它们有时充其量也有局限性。我想要