【问题标题】:Search function issues with an array of objects vs an object of objects对象数组与对象对象的搜索功能问题
【发布时间】:2018-12-12 08:51:47
【问题描述】:

我有一个我想从中搜索的数据库,但是在创建一个更新、更大的数据库时,格式发生了变化。我想将新格式重新格式化为旧格式,但不知道如何。这是我的情况。

我有这个对象数组:

let people = [{"name": "John", "country": "England", "hair": "brown"},
              {"name": "Jenny", "country": "Scotland", "hair": "black"}]

新数组如下所示:

let newPeople = [{
                  "John": {"country": "England", "hair": "brown"},
                  "Jenny": {"country": "Scotland", "hair": "black"}
                }]

我有一个 people 数组的搜索功能,其工作原理如下:

function getCountry(name) {
    for (let i = 0; i < people.length; i++) {
        if (name === people[i].name) {
            return people[i].country;
        }
    }
}

完美运行的地方:

getCountry("Jenny") // returns "Scotland"

现在,在“newPeople”数组中,要获取 Jenny 的国家,我必须写:

newPeople[0].Jenny["country"]

这非常令人费解,尤其是因为每个人都是 newPeople[0] 的一部分,而不是每人增加 1 个。而且我确定我可能缺少一种方法,但是我不能使用相同的 for 循环,也不能通过“名称”匹配搜索的词,因为对象没有“名称”属性不再来自旧的“人”数组。

无论如何我可以简单地将新数组转换为具有旧格式的数组吗?如果是这样,我将对整个数据库执行此操作,而不是使用新格式。

【问题讨论】:

  • 为什么你有一个newPeople 的数组?是给的吗?
  • 这应该将newPeople 转换为旧数组格式Object.keys(newPeople[0]).map(k =&gt; ({name : k, ...newPeople[0][k]}));
  • @NinaScholz newPeople 数组是 people 数组的“新”版本!
  • @HassanImam 非常感谢!!这绝对完美。我不知道如何使用 Object.key 和 .map 函数!我从来没有想过我在 StackOverflow 的第一次体验会这么快有帮助。我将使用它,并确保研究使用的每个部分,以便以后如果需要我可以自己实现它。再次感谢您!

标签: javascript arrays javascript-objects


【解决方案1】:

如果要迭代,可以使用Object.keys(newPeople)。它返回一个包含“newPeople”键的数组。在这种情况下,数组将是 ["John", "Jenny"]。

但是为了实现你的目标,你可以(如果响应总是一个只有一个对象的数组,就像你发布的那个):

function getCountry(name) {
  return newPeople[0][name].country;
}

如果您的数组并不总是包含单个对象中的所有名称,则您必须像以前一样进行迭代:

function getCountry(name) {
    for (let i = 0; i < people.length; i++) {
        if (name in people[i]) {
            return people[i][name].country;
        }
    }
}

【讨论】:

  • 我明白了!我现在了解到newPeople[0][name] 在将name 声明为"Jenny" 等之后将返回该对象!谢谢你。 @HassanImam 向我展示了一个快速重新格式化函数,将其从对象对象更改为更熟悉的(对我而言)对象数组。这很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 2023-04-04
  • 1970-01-01
  • 2015-10-06
  • 2021-01-20
相关资源
最近更新 更多