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

时间:2019-03-09 20:39:27

标签: javascript arrays react-native javascript-objects

我所拥有的

{
     "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。

谢谢!

3 个答案:

答案 0 :(得分:4)

Array.flatMap()Object.values()一起使用以获取内部对象的数组:

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)

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

使用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);

这假定嵌套对象只有一个属性,并且它们都是相同的属性名,如您的示例所示。如果它更具动态性,则使对象变平的其他答案更合适。