Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 搜索功能在对象数组与对象对象之间存在问题_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 搜索功能在对象数组与对象对象之间存在问题

Javascript 搜索功能在对象数组与对象对象之间存在问题,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个数据库,我想从中搜索,但当制作一个更新、更大的数据库时,格式改变了。我想将新格式重新格式化为旧格式,但不知道如何进行。这是我的情况 我有一组对象: let people = [{"name": "John", "country": "England", "hair": "brown"}, {"name": "Jenny", "country": "Scotland", "hair": "black"}] 新阵列如下所示: let newPeople = [{

我有一个数据库,我想从中搜索,但当制作一个更新、更大的数据库时,格式改变了。我想将新格式重新格式化为旧格式,但不知道如何进行。这是我的情况

我有一组对象:

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"}
                }]
function getCountry(name) {
    for (let i = 0; i < people.length; i++) {
        if (name === people[i].name) {
            return people[i].country;
        }
    }
}
我有一个搜索
人物
数组的功能,其工作原理如下:

let newPeople = [{
                  "John": {"country": "England", "hair": "brown"},
                  "Jenny": {"country": "Scotland", "hair": "black"}
                }]
function getCountry(name) {
    for (let i = 0; i < people.length; i++) {
        if (name === people[i].name) {
            return people[i].country;
        }
    }
}
现在,在“新人”数组中,为了得到Jenny的国家,我必须写:

newPeople[0].Jenny["country"]
这是令人难以置信的复杂,特别是因为每个人都是新人[0]的一部分,而不是每个人增加1。我肯定有一个方法我可能遗漏了,但我不能使用相同的for循环,也不能通过“name”匹配搜索的词,因为对象不再具有旧的“people”数组中的“name”属性


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

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

但是为了实现您的目标,您可以(如果响应始终是一个只有一个对象的数组,如您发布的对象),只需:

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

function getCountry(name) {
    for (let i = 0; i < people.length; i++) {
        if (name in people[i]) {
            return people[i][name].country;
        }
    }
}
函数getCountry(名称){
for(设i=0;i
为什么要为
新人设置数组?是否给定?这应该将
newPeople
转换为旧的数组格式
Object.keys(newPeople[0]).map(k=>({name:k,…newPeople[0][k]})
@NinaScholz
newPeople
数组是
people
数组的“新”版本@哈萨尼姆非常感谢你!!这工作绝对完美。我不知道如何使用Object.key或.map函数!我从来没有想到我在StackOverflow的第一次经历会如此迅速地有帮助。我将使用它,并确保对使用的每个部分进行研究,以便在以后需要时可以自己实现它。再次感谢你!我懂了!我现在了解到,
newPeople[0][name]
在向
“Jenny”
等声明
name
后,将返回该对象!非常感谢。@hassaniam向我展示了一个快速的重新格式化函数,可以将它从一个对象的对象更改为(对我来说)更熟悉的对象数组。这非常有帮助。