我需要从数组中的第二项开始。为了保存正确的上下文,我需要使用forEach
而不是简单的for
loop.
我已经用下一种方式做到了:
private convertToRanges(arr: []): any[] {
const inputArr = arr.slice(),
if (inputArr.length > 1) {
let lastIndex = 0;
inputArr.shift();
inputArr.forEach(item => {
...
});
}
...
}
我复制并删除副本中的第一项。
是否有另一种方法可以从第二项开始并确定上下文?
你不知道forEach
从哪里开始,不,但是你可以忽略你不想要的电话:
inputArr.forEach((value, index) => {
if (index < 1) return;
// Code from here onward will only run for entries that aren't
// the first entry
});
或者,如果您不担心复制大部分数组,则可以随时使用slice
:
inputArr.slice(1).forEach(value => {
// ...
});
您也可以定义自己的forEach
-style 函数接受起始索引(如果您愿意),使其不可枚举并仔细选择名称以避免冲突。
也许还值得注意的是,由于您使用的是 ES2015,因此使用的一些原因forEach
由于块作用域,稍微消失了一点。for
仍然比forEach
使用箭头函数,但可以让您开始、结束并按您喜欢的任何值递增:
for (let i = 1; i < inputArr.length; ++i) {
// ...`i` and also any `let` or `const` here are scoped to
// this specific loop iteration...
}
关于的部分i
上面主要是一件好事,但也有轻微的性能影响(至少目前如此),因为新的i
必须为每次迭代创建。不过,性能影响通常并不重要,而且不会像调用函数那样大forEach
.
上面的无偿例子:
const inputArr = ['a', 'b', 'c', 'd'];
for (let i = 1; i < inputArr.length; ++i) {
// A closure to emphasize that each `i` is distinct
setTimeout(() => {
console.log("inputArr[" + i + "] = " + inputArr[i]);
}, 0);
}
(通常我会在那里使用模板文字,但想避免给人留下这样的印象i
与此相关的行为。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)