“ object [value] = true”的含义

时间:2019-04-13 13:30:46

标签: javascript arrays object

我知道这是一个很奇怪的问题,但是,我创建了一个防止数组中重复值的保护程序,我写了一部分,并从stackoverflow得到了一些帮助,但我无法正确理解代码的含义

所以我用null原型创建了对象,并对其进行迭代以检测重复值(我知道Set构造函数要容易得多,但是我在服务器端代码中做到了这一点,并且由于较旧的浏览器不支持Set(使用Set)是危险的。这是我的代码

var duplicateTagsGuard = Object.create(null);

    for(var co = 0; co < tags.length; co++){
      let val = tags[co];

      if(val in duplicateTagsGuard){
        return res.status(409).send({
          message: ''
        })
      }

       duplicateTagsGuard[val] = true

    }

我无法理解的部分是duplicateTagsGuard[val] = true

因此,如果我们逐步拆分代码并进行解释,就像

1。首先创建空对象

2.iterate for循环并声明变量val,使其等于标签数组中的每个元素

3。然后检查val是否在plicateTagsGuard对象中,是否使用return语句防止继续进行for循环,如果不是,则将val的值添加到对象中,但是如果有人能解释我会很高兴,我不知道如何用那部分代码(duplicateTagsGuard[val] = true)来实现它

2 个答案:

答案 0 :(得分:0)

代码正在创建val的字典。基本上,当您遍历tags数组时,它将检查字典tags[co]中是否已经存在该数组中的项目(由duplicateTagsGuard访问)。如果以前遇到过,它将执行某些操作。

在循环结束时,它只是将项目插入字典中。因此,词典会跟踪在for循环中是否曾经遇到过某个项目。

通过使用该项作为字典中的键来完成注入,因为查找起来更容易(您只需要做item in dictionary,这在实际实现中基本上是val in duplicateTagsGuard代码)。使用什么值都没有关系,因此将true值用作占位符。

答案 1 :(得分:0)

  

首先创建空对象

它是 不创建 null对象,但是它是使用null作为 prototype < / em> 检查Object.create文档:

var duplicateTagsGuard = Object.create(null);
console.log(`duplicateTagsGuard is an empty object:`);
console.log(duplicateTagsGuard);
console.log(`Prototye of duplicateTagsGuard is null: `);
console.log(Object.getPrototypeOf(duplicateTagsGuard));

  

对其进行迭代并声明变量val,使其等于标签数组中的每个元素

每次循环运行时,此部分都是正确的,将使用for块范围创建一个新变量,并为其分配{{1}的当前co th 索引值的值}数组。

  

然后检查val是否在plicateTagsGuard对象中,以及是否使用return语句来防止继续进行for循环,如果不是,那么我们将val的值添加到对象中,但是我不知道如何用该部分实现它代码(duplicateTagsGuard [val] = true)

正在检查tags是否是val对象的属性,如果已经存在,则使用return返回响应,否则将其添加到{{1} }对象与bracket notation duplicateTagsGuard并将其值分配为duplicateTagsGuard

[propertyName]