«object [value] = true» означает - PullRequest
       1

«object [value] = true» означает

0 голосов
/ 13 апреля 2019

я знаю, что это довольно странный вопрос, но я создавал защиту от повторяющихся значений в массиве, я записывал некоторую часть и получил небольшую помощь от stackoverflow, но я не могу правильно понять смысл кода

, поэтому я создал объект с null прототипом и повторил цикл по нему, чтобы обнаружить дублирующиеся значения (я знаю, что конструктор Set намного проще, но я делаю это в своем коде на стороне сервера, и поскольку старые браузеры не поддерживают Set it было бы опасно использовать 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. Вставьте в него цикл и объявите переменную val и сделайте его равным каждому элементу в массиве тегов

3. Затем проверьте, находится ли val в объекте duplicateTagsGuard и используется ли оператор return для предотвращения продолжения цикла, а если нет, то мы добавляем значение val к объекту, но я этого не делаю знать, как это реализовано с этой частью кода (duplicateTagsGuard[val] = true), если кто-нибудь может объяснить, я буду рад

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

сначала создать нулевой объект

не создает null объекта, но создает объект с null в качестве прототипа 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 и приравнивание ее к каждому элементу в массиве тегов

Эта часть верна каждый раз, когда цикл запускается, создается новая переменная для области видимости блока, которой присваивается значение текущего co th значения индекса массива tags.

, затем проверьте, находится ли этот val в объекте duplicateTagsGuard и используется ли оператор return для предотвращения продолжения цикла, а если это не так, мы добавляем значение val в объект, но я не знаю, как это реализовано с этой частью кода (duplicateTagsGuard [val] = true)

Он проверяет, является ли val свойством объекта duplicateTagsGuard, если он уже присутствует, то возврат используется для возврата ответа, в противном случае он добавляет это свойство к объекту duplicateTagsGuard с помощью * 1042. * скобка [propertyName] и присвоение ее значения true.

var duplicateTagsGuard = Object.create(null); //creating a new empty object with prototype as null
let val = "hello"; //creating a new variable
duplicateTagsGuard[val] = true; //adding the property with the value of the variable val
console.log(val in duplicateTagsGuard); //checking if the added property is present in the object
0 голосов
/ 13 апреля 2019

Код создает словарь val. В основном, когда вы перебираете массив tags, он проверяет, присутствует ли элемент в массиве (доступ к которому tags[co]) уже в словаре duplicateTagsGuard. Если он встречался ранее, он выполнит определенное действие.

В конце цикла он просто вставляет элемент в словарь. Таким образом, словарь отслеживает, встречался ли ранее элемент в цикле for.

Внедрение выполняется с использованием элемента в качестве ключа в словаре, поскольку его легче найти (вам просто нужно сделать item in dictionary, что в сущности составляет val in duplicateTagsGuard в реальной реализации кода) , Неважно, какое значение вы используете, поэтому в качестве заполнителя используется значение true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...