Как мне зациклить массив на заданный ключ на объекте? - PullRequest
0 голосов
/ 14 ноября 2018

Мне было дано задание на создание функции, которая, учитывая объект и ключ, возвращает массив, содержащий все элементы массива, расположенные по данному ключу, которые меньше 100. Я придумал это:

function getElementsLessThan100AtProperty(obj, key) {
  var lessThan100 = [];
  var targetedKey = obj[key];
  if (targetedKey === undefined) {
    return [];
  }
  for (i = 0; i < targetedKey.length; i++) {
    if (targetedKey[i] < 100) {
      lessThan100.push(targetedKey[i]);
    }
  }
return lessThan100;
}

Теперь это работает, но мне интересно, почему мой оригинальный код не сработал. Я попытался перебрать массив в указанном свойстве, написав код ниже, но это не сработало. Почему я не могу это сделать? Кроме того, кто-нибудь покажет мне, как очистить этот код, чтобы сделать его короче?

for (i = 0; i <obj[key].length; i++) {
    if (obj[key[i]].length < 100) {
      lessThan100.push(obj[key[i]]);
    }

Ответы [ 2 ]

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

В вашем исправленном коде вы проверяете, меньше ли длина элемента в массиве, чем 100, а не если значение элемента меньше 100. Вам следует проверять значение (т. е. <100; не. длина <100) </p>

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

Поскольку obj[key[i]] должно быть obj[key][i], дополнительно вы проверяете, является ли длина меньше 100, что, вероятно, не является вашим намерением.

Весь код может быть записан как:

 const getLessThanHundred = (obj, key) =>
   obj[key].filter(it => it < 100);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...