我有一个要搜索的数据库,但是当制作一个新的,更大的数据库时,格式更改了。我想将新格式重新格式化为旧格式,但不知道如何。这是我的情况。
我有这个对象数组:
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”数组中,要获取詹妮的所在国家,我必须写:
newPeople[0].Jenny["country"]
这令人难以置信,尤其是因为每个人都是newPeople [0]的一部分,而不是每个人的数字增加1。而且我确定可能缺少一种方法,但是我不能使用相同的for循环,也不能通过“名称”匹配搜索到的术语,因为对象没有“名称”属性从旧的“人”阵列中删除。
无论如何,我可以简单地将新数组转换为具有旧格式的数组吗?如果是这样,我将对整个数据库执行此操作,而不是使用新格式。
答案 0 :(得分:0)
如果要迭代,可以使用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;
}
}
}