gpt4 book ai didi

javascript - 进行修改时应出现 'for-of' 循环,而不是 'for' 循环

转载 作者:行者123 更新时间:2023-12-02 22:57:47 33 4
gpt4 key购买 nike

我在使用 TSlint 时遇到问题,并且理解为什么 for(i=0; ...)不再允许循环。

假设我有一个简单的代码,例如:

this.filters['1','2','3'....];
for (let i = 0; i < this.filters.length; i++) {
if (this.filters[i] === '2') {
this.filters = new_value;
}
}

其中TSlint要求我将其转换为for-of。但是,使用 for-of 不起作用,因为我需要修改该值,而 for-of 不允许修改。我可以使用类似的东西

for (const [i, el] of this.filters.entries()) { 

但随后我收到编译警告TypeScript 和迭代器:类型 'IterableIterator<T>'不是数组类型我确实必须更改编译选项。另外,我可以迭代 keys()我认为拥有 for(const i=0...) 有点愚蠢

有人可以解释一下为什么TSlint仍然提示这个问题以及为什么不允许使用 for(const i=0; ....)

此外,我刚刚看到如果在for-of中执行此代码

this.filters['1','2','3'....];
for (let f of this.filters) {
if (f === '2') {
f = new_value;
}
}

我最终会得到相同的数组,因为它在循环后没有被修改,但是,如果我有类似的方法但使用对象

let filters = [{id:'1'},{id:'2'},{id:'3'}];
console.log(filters)
for (let f of filters) {
if (f.id === '2') {
f.id = 'toto';
}
}
console.log(filters)

令人惊讶的是,我的对象数组在循环后被修改了!有人可以解释一下为什么吗?

谢谢

我搜索了该错误,并在 github 中将其视为已关闭的问题,但找不到解决方案 https://github.com/palantir/tslint/pull/1813

最佳答案

使用字符串,您会得到以下结果:

字符串被分配给f。然后新值被重新分配给f:f === '2'。但数组中的字符串没有被触及。

对于对象:

对对象的引用被分配给f。然后对象被修改:f.id = 'toto'。由于数组仅包含对对象的引用 - 我们在数组中获取修改后的对象。

基本上,答案最终是引用类型和值类型变量之间的差异。

在您的情况下,如果 for (const [i, el] of this.filters.entries()) { 由于 ts 设置而不起作用,您可以尝试:

arr.forEach((entry, index) => arr[index] = ...);

或者更难看的东西:

for(entry of arr) {
arr[arr.indexOf(entry)] = ...;
}

关于javascript - 进行修改时应出现 'for-of' 循环,而不是 'for' 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57907732/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com