javascript - JavaScript 中数组中的对象未更新

标签 javascript arrays typescript object

我正在 Angular 应用程序中编写几行 typescript 代码,构造函数中有几个 bool 变量,以及一个对象数组。该数组中每个对象的一部分都是由输入变量组成的。

selftest: boolean;
failed: boolean;

    locoStateItems = [
    {
        name: 'FAILED',
        isSelected: this.failed
    },
    {
        name: 'SELFTESTED',
        isSelected: this.selftest
    }

稍后在另一个函数中

toggleMe(name: string){
   if (name === 'FAILED') {
       this.failed = !this.failed
   } else if(name === 'SELFTESTED'){
       this.selftest = !this.selftest;
   }
}

在 DOM 中显示的 locoStateItems 不会受到影响,除非我明确编写以下内容

locoStateItem[0].isSelected = this.failed;
locoStateItem[1].isSelected = this.selftest;

对此有何解释,以及如何避免这种情况?

最佳答案

这是因为 boolean 是一个原语,这意味着您只是在声明数组时分配值。这不会分配对 bool 变量的引用,因此它们不会在数组的对象中自动更新。

如果您打算保留此结构,则必须手动更新数组对象 bool 值。

根据我的假设,您应该将函数更改为:

toggleMe(name: string){
   if (name === 'FAILED') {
       this.failed = !this.failed;
       this.locoStateItem[0].isSelected = this.failed;
   } 
   else if(name === 'SELFTESTED'){
       this.selftest = !this.selftest;
       this.locoStateItem[1].isSelected = this.selftest;
   }
}

我不确定这个方法的目的是什么,但从我从你的问题中可以看出,这应该是有效的。

关于javascript - JavaScript 中数组中的对象未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60513165/

相关文章:

javascript - 如何与 js 文件 laravel 共享变量?

JavaScript:仅列出一次具有相同父值的值

angular - 如何创建原理图任务?

node.js - Docker 容器正在运行,但其进程已完成

angular - 网络包错误 : Final loader didn't return a Buffer or String

javascript - 将 JSON DateTime 转换为 JavaScript 日期时,它显示为比本地时区早 1 天

javascript - typescript 类型和 .bind

javascript - 对象、数组和 $.each()

javascript - Angular 过滤对象的多个字符串

javascript - 'this' 对 item 的引用在 ie 中单击错误