无法使用下划线的findWhere方法来更新数组值

时间:2018-01-16 16:18:09

标签: typescript underscore.js

我似乎无法弄明白这一点,虽然我非常积极,但之前我已经使用过这种方法。

我有一个在构造函数方法之前初始化的对象数组。

servers: ServerObject[] = [
    {
        name: 'dev',
        disabled: true
    },
    {
        name: 'qa',
        disabled: true
    },
    {
        name: 'prod',
        disabled: true
    }
];

我们的想法是在登录后切换服务器权限。因此,根据返回的标记,将disabled设置为false。这发生在构造函数方法中。这是看起来像:

_.each(this.tokens, (item:TokenObject) => {

    // print array -> target property is correctly set to 'true'
    console.log(this.servers);

    // print object before change -> target property is correctly set to 'true'
    console.log(_.findWhere(this.servers, {name: item.name}));

    _.findWhere(this.servers, {name: item.name}).disabled = false;

    // print object after change -> target property is correctly set to 'false'
    console.log(_.findWhere(this.servers, {name: item.name}));

    // print array -> target property is incorrectly set to 'true'
    console.log(this.servers);

})

我需要this.servers来表明这一点:

{
    name: 'qa',
    disabled: false
}, 

我也试过这个下划线的findIndex方法,控制台消息与上面相同。这是这样的:

this.servers[_.findIndex(this.servers, {name: item.name})].disabled = false;

2 个答案:

答案 0 :(得分:0)

你能试试吗?

this.tokens.forEach((item:TokenObject) => 
    this.servers.find(server=>server.name === item.name).disabled = false;
})

答案 1 :(得分:0)

我测试了这段代码:

const servers: any[] = [
  {name: 'dev', disabled: true},
  {name: 'qa', disabled: true},
  {name: 'prod', disabled: true}
];

[{name: 'prod'}].forEach((item) => servers.find(server => server.name === item.name).disabled = false);
console.log(servers);
console.log(servers.filter(server => !server.disabled));

结果

  • First Log:
  

“[{” 名称 “:” dev的”, “无效”:真},{ “名称”: “QA”, “无效”:真},{ “名称”: “PROD”, “无效”:假}]“

  • 第二次登录:
  

“[{” 名称 “:” PROD “ ”无效“:假}]”

这对你有帮助吗?