我正在学习ES6中的一些新技巧,我非常喜欢数组的for-of循环。我遇到麻烦的一件事是,如果我想操纵循环中当前项目的值。
例如在ES5中:
var myArr = [1,2,3];
for(var i = 0; i < myArr; i++){
myArr[i] = "moo"
}
当在ES6中使用for-of循环时,如果我更改循环内当前项的值,它不会反映在数组中。有没有办法做到这一点?
答案 0 :(得分:6)
如果您还需要带有for … of
循环的数组迭代中的索引,请使用.entries()
method:
const myArr = [1,2,3];
for (const [i, el] of myArr.entries()) {
myArr[i] = "moo" + el;
}
如果您只对索引感兴趣而没有值,则可以改为myArr.keys()
。
答案 1 :(得分:1)
不是for-of
,不是。您没有该项的索引,并且写入您的变量对原始数组没有影响。
你可以破解它:
let index = 0;
for (const v of myArr) {
if (/*...some condition...*/) {
myArr[index] = "moo";
}
++index;
}
...这是有效的,因为数组迭代器的定义,但它非常详细。在这种情况下,forEach
可能是更好的选择,如果你想要就地更新数组,或map
如果你很乐意创建一个新数组,或者一个好的老式for
let myArr = [1,2,3];
myArr[10] = "sparse"; // Just to prove it works
console.log("before", myArr);
let index = 0;
for (const v of myArr) {
if (v === "sparse") {
myArr[index] = "moo";
}
++index;
}
console.log("after", myArr);
1}}循环。
以上的无理示例(也表明它适用于稀疏数组,因为定义了数组迭代器的方式):
1. SELECT * FROM TABLE WHERE NAME = '3" Nail';
2. SELECT * FROM TABLE WHERE NAME = '3\" Nail';
3. SELECT * FROM TABLE WHERE NAME = '3'" Nail';
4. SELECT * FROM TABLE WHERE NAME = '3'''' Nail';
5. SELECT * FROM TABLE WHERE NAME = '3\'\' Nail';