具有多个内部对象的数组,将更深的内在对象作为数组提取



我有什么

{
     "1zkhj45kjb3h3jj27777fjd": {"-L7hgtdyYUYY56":{ email: "abc@gmail.com",name:"abc"   } },
     "1zkhj45kjb3h898fj7fjddk": {"-L7hgtdyYUYY56":{ email: "dumy@gmail.com",name:"dumy" } } 
}

我做了什么

const snapshot = snap.val()
const items = Object.values(snapshot)

现在items看起来像

[
    {"-L7hgtdyYUYY56":{ email: "abc@gmail.com",name:"abc"   } },
    {"-L7hgtdyYUYY56":{ email: "dumy@gmail.com",name:"dumy" } } 
]

,但我想要

[
    { email: "abc@gmail.com",name:"abc"   } ,
    { email: "dumy@gmail.com",name:"dumy" } 
]

我尝试了所有其他链球菌,例如Object.keysObject.enteries。如果我再次致电object.values,则会给出相同的结果。

如何做JavaScript?我是新手反应本地和javaScript。

谢谢!

使用 Object.values()使用 Array.flatMap()获取内在对象的数组:

const items = {
     "1zkhj45kjb3h3jj27777fjd": {"-L7hgtdyYUYY56":{ email: "abc@gmail.com",name:"abc"   } },
     "1zkhj45kjb3h898fj7fjddk": {"-L7hgtdyYUYY56":{ email: "dumy@gmail.com",name:"dumy" } } 
}
const result = Object.values(items).flatMap(Object.values)
  
console.log(result)

如果不支持Array.flatMap(),请改用Array.map()。但是,结果将是一系列数组,因此您需要将其弄平。您可以通过将数组的数组扩展到Array.concat()

来使其更平坦。

const items = {
     "1zkhj45kjb3h3jj27777fjd": {"-L7hgtdyYUYY56":{ email: "abc@gmail.com",name:"abc"   } },
     "1zkhj45kjb3h898fj7fjddk": {"-L7hgtdyYUYY56":{ email: "dumy@gmail.com",name:"dumy" } } 
}
const result = [].concat(...Object.values(items).map(Object.values))
  
console.log(result)

使用map()flat()两次使用Object.values()

const data = {
 "1zkhj45kjb3h3jj27777fjd": {"-L7hgtdyYUYY56":{ email: "abc@gmail.com",name:"abc"   } },
 "1zkhj45kjb3h898fj7fjddk": {"-L7hgtdyYUYY56":{ email: "dumy@gmail.com",name:"dumy" } } 
};
const result = Object.values(data).map(Object.values).flat();
console.log(result);

使用 Object.values()将嵌套对象作为数组获取,然后使用 .map()获取其中每个 -L7hgtdyYUYY56的值。

const snapshot = {
 "1zkhj45kjb3h3jj27777fjd": {"-L7hgtdyYUYY56":{ email: "abc@gmail.com",name:"abc"   } },
 "1zkhj45kjb3h898fj7fjddk": {"-L7hgtdyYUYY56":{ email: "dumy@gmail.com",name:"dumy" } } 
};
var result = Object.values(snapshot).map(e => e["-L7hgtdyYUYY56"]);
console.log(result);

这假设嵌套对象只有一个属性,它们都是与您的示例相同的属性名称。如果是动态的,则更扁平对象的其他答案更合适。

相关内容

  • 没有找到相关文章

最新更新