Возникла проблема с получением 2 свойств в одном объекте - PullRequest
0 голосов
/ 11 февраля 2020

Хорошо, поэтому в основном у меня есть этот объект, называемый user utils, и я должен добавить к нему объект с именем search, у которого есть два свойства с именами byName и byCountry. Если я запускаю первый с комментарием второго, он работает нормально, но когда я пытаюсь запустить первый без комментариев второго, он говорит: «TypeError: userUtils.search.byName не является функцией». Если я запускаю второй, он работает правильно, даже если первый не закомментирован.

userUtils.search = {
  byName: function(name, fuzzy) {
    let matchedNames;
    matchedNames = users.filter(function(element) {
      if (fuzzy) {
        return (
          element.name.first.toUpperCase().startsWith(name.toUpperCase()) ||
          element.name.last.toUpperCase().startsWith(name.toUpperCase())
        );
      }
      return element.name.first.startsWith(name) || element.name.last.startsWith(name);
    });
    return matchedNames;
  }
};
userUtils.search = {
  byCountry: function(...args) {
    let argArray = args;
    let matchedCountries = [];
    let count = 0;
    for (let i = 0; i < argArray.length; i++) {
      for (let j = 0; j < users.length; j++) {
        if (argArray[i] === users[j].address.country) {
          matchedCountries[count] = users[j];
          count++;
        }
      }
    }
    return matchedCountries;
  }
};

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Вы каждый раз пересматриваете определение 'userUtils.search'. Я рекомендую вам сначала объявить, что такое userUtils.search, а затем начинать с его дочерних элементов. () вместо вашего 'count' в функции 'byCountry'?

Пример:

for (let i = 0; i < argArray.length; i++) {
    for (let j = 0; j < users.length; j++) {
        if (argArray[i] === users[j].address.country) {
            matchedCountries.push( users[j] );
        }
    }
}
0 голосов
/ 11 февраля 2020

Вы просто перезаписывали значение userUtils.search каждый раз. Вы хотите определить свойства объекта поиска, а не его.

var userUtils = userUtils || {};
userUtils.search = {
  byName: function(name, fuzzy) {
    let matchedNames;
    matchedNames = users.filter(function(element) {
      if (fuzzy) {
        return (
          element.name.first.toUpperCase().startsWith(name.toUpperCase()) ||
          element.name.last.toUpperCase().startsWith(name.toUpperCase())
        );
      }
      return element.name.first.startsWith(name) || element.name.last.startsWith(name);
    });
    return matchedNames;
  },
  byCountry: function(...args) {
    let argArray = args;
    let matchedCountries = [];
    let count = 0;
    for (let i = 0; i < argArray.length; i++) {
      for (let j = 0; j < users.length; j++) {
        if (argArray[i] === users[j].address.country) {
          matchedCountries[count] = users[j];
          count++;
        }
      }
    }
    return matchedCountries;
  }
};

console.log(Object.keys(userUtils.search))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...