Как работает этот код, который ищет несколько значений в массиве? - PullRequest
0 голосов
/ 17 ноября 2018

Я искал решение для поиска нескольких значений в массиве и нашел это:

function find_duplicate_in_array(arra1) {
  var object = {};
  var result = [];

  arra1.forEach(function(item) {
    if (!object[item])
      object[item] = 0;
    object[item] += 1;
  })

  for (var prop in object) {
    if (object[prop] >= 2) {
      result.push(prop);
    }
  }
  return result;
}

console.log(find_duplicate_in_array([1, 2, -2, 4, 5, 4, 7, 8, 7, 7, 71, 3, 6]));

Я не понимаю, что происходит.В частности, это:

object[item] = 0;
object[item] +=1;

Итак ... для каждого элемента в массиве, если элемент отсутствует в временном объекте, добавляющем элемент с индексом 0, а затем +1?.

Что происходит?Кто-нибудь, пожалуйста, объясните построчно.Я новичок в JavaScript.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Возможно, вам не хватает оператора block { ... } оператора if , который будет

if (!object[item]) {
    object[item] = 0;
}
object[item] += 1;

, что означает, что если object[item] не является истинным , тогда присвойте ноль object[item].

Затем увеличьте это значение.

if (!object[item])    // no block statement
    object[item] = 0; // then part finished with semicolon
object[item] += 1;    // code after the condition

Данный код является действительным изменением вышеперечисленного, принимая только один оператор, который заканчивается точкой с запятой. В этом случае вам не нужен оператор блока.

0 голосов
/ 17 ноября 2018

Вот код, с каждой строкой комментария!Я надеюсь, что это поможет вам;)

function find_duplicate_in_array(arra1) {

  // Temporary count of each item in the input array/
  var object = {};
  // Final result containing each item that has been seen more than one time.
  var result = [];

  // For each item of the array...
  arra1.forEach(function (item) {
    // If it is not in the temporary object, initialize it to 0.
    if(!object[item])
      object[item] = 0;
    // Add one since we just have found it!  
    object[item] += 1;
  })


  // Now, every item of the input array has been counted in object.
  // For each item of object:
  for (var prop in object) {
    // If it has been counted more than one time, add it to the result.
    if(object[prop] >= 2) {
      result.push(prop);
    }
  }

  // Return the result.
  return result;

}

console.log(find_duplicate_in_array([1, 2, -2, 4, 5, 4, 7, 8, 7, 7, 71, 3, 6]));

Сложность указана в следующих строках:

if(!object[item])
  object[item] = 0;
object[item] += 1;

Это то же самое, что и более строгая запись:

if(!object[item]) {
  object[item] = 0;
}
object[item] += 1;

Если вы не установите фигурные скобки, будет выполнена только следующая инструкция!

...