Увеличение значений в объекте JavaScript в цикле for

#javascript #arrays #algorithm #data-structures #hashtable

#язык JavaScript #массивы #алгоритм #структуры данных #хэш-таблица

Вопрос:

Конкретная проблема требует возврата первого уникального значения (т. Е. Значения, которое появляется только один раз в массиве). Мой подход состоял в том, чтобы создать объект с ключами в качестве элементов массива и значениями в качестве счетчика того, сколько раз было просмотрено каждое значение.

 function solution(arr) {  let uniqueObj = {}  for (let i=0; ilt;arr.length; i  ){  if(uniqueObj[arr[i]] !== undefined){  uniqueObj[arr[i]] = uniqueObj[arr[i]]   1  }  uniqueObj[arr[i]] = 1  }  console.log(uniqueObj)  } solution([4,10,5,4,2,10])  //output { '2': 1, '4': 1, '5': 1, '10': 1 }  

почему значение не увеличивается каждый раз, когда отображается один и тот же ключ?

Комментарии:

1. Вы сбрасываете его до 1 с помощью uniqueObj[arr[i]] = 1

2. Эта строка должна быть в else блоке.

3. Кстати, вы можете использовать для увеличения значения, так что вам не придется писать все выражение дважды.

Ответ №1:

После вашего заявления if вы uniqueObj[arr[i]] возвращаетесь к 1. Вам нужно добавить предложение else для when uniqueObj , которое не имеет значения в arr[i] :

  if (uniqueObj[arr[i]] !== undefined) {  uniqueObj[arr[i]]  = 1; } else { // add else block  uniqueObj[arr[i]] = 1  }