javascript - 在一个对象中获取 2 个属性时遇到问题

标签 javascript arrays object properties

好吧,基本上我有一个名为 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;
  }
};

最佳答案

您每次都在重新声明“userUtils.search”的定义。我对您的建议是首先声明“userUtils.search”是什么,然后从它的子项开始。

userUtils.search = {};

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,
        matchedCountries = [],
        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;
};

说到这里,您是否考虑过使用 Array.push() 代替“byCountry”函数中的“count”?

示例:

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] );
        }
    }
}

关于javascript - 在一个对象中获取 2 个属性时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60160631/

相关文章:

javascript - 这个 Camel 条款有什么问题

php - 快速搜索PHP数组

c++ - 在 C++ 中乘以二维数组

javascript - 使用内部定义变量的 JSON 定义

java - 将一个类中创建的对象访问到另一个类中

javascript - Node.js:使用唯一的公钥对客户端进行身份验证(类似于 Github SSH key 身份验证)

javascript - React-Native:Date.parse() 失败,偏移量为 "+0000"

javascript - 如何在 JavaScript 中 5 秒后只刷新一次页面?

php - 基于一个或多个提供的键递归访问潜在的嵌套值

java - 如何在 Java 中创建处理泛型和数组的抓取方法