Итерация по объекту в TypeScript, чтобы найти конкретное значение - PullRequest
0 голосов
/ 01 ноября 2019

Попытка найти ключ в объекте, который отображается на значение "1".

В текущем виде функция возвращает неопределенное значение.

Это ожидаемое поведение.

input : deliveryIds: [5,4,5,3,3]
output: 4

Это код, который перебирает объект в поиске ключа, который отображается в «1».

Любая помощь пото, что мне нужно изменить, высоко ценится.

function findMissingQuad(deliveryIds: number[]) {
  const idsToOccurrences = {};

  deliveryIds.forEach(id => {
    if (idsToOccurrences[id]) {
      idsToOccurrences[id]++;
    } else {
      idsToOccurrences[id] = 1 || [];
    }
  });

  return Object.keys(idsToOccurrences).forEach(id => {
    if (idsToOccurrences[id] === 1) {
      return id;
    }
  });
}

1 Ответ

0 голосов
/ 01 ноября 2019

Одним из решений будет сохранение набора чисел, который вы видели вообще, и другого набора чисел, который вы видели только один раз, и удаление числа из второго набора, если вы видели его ранее:

function findMissingQuad(deliveryIds/*: number[]*/) {
    const seen = new Set();
    const once = new Set();
    for (const id of deliveryIds) {
        if (seen.has(id)) {
            // We'e seen this one before
            once.delete(id);
        } else {
            // First time we've seen this one
            seen.add(id);
            once.add(id);
        }
    }
    return [...once];
}

console.log(findMissingQuad([5, 4, 5, 3, 3]));
console.log(findMissingQuad([5, 4, 5, 2, 3, 3]));

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

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