使用随机密钥处理Javascript对象

时间:2017-02-06 07:37:22

标签: javascript angular typescript

从firebase下载数据后,返回的对象是一个包含多个子对象的对象。

myObj = 
{
    "J251525" : {
        "email" : "TOM@MAIL.COM",
        "description" : "CLEAN THE HOUSE",
        "refNumber" : "J251525"
    },
    "J512912" : {
        "email" : "JAMES@MAIL.COM",
        "description " : "BRUSH HORSE",
        "refNumber" : "J512912"
    },
    "J53f512" : {
        "email" : "HARRY@MAIL.COM",
        "description " : "WASH CAR",
        "refNumber" : "J53f512"
    }
};

我想分解这些数据,以便我可以使用它在html中显示我的thead / tbody,类似于以下布局

screen shot

所以我需要

  1. 以某种方式通过查看myObj创建一系列[' email',' description',#39; refNumber']。
  2. 遍历对象(可能是对象吗?)并创建几个数组,如
  3.   

    [' TOM@MAIL.COM','清洁房屋',' J251525']

         

    [' JAMES@MAIL.COM' ;,' BRUSH HORSE',' J512912']

         

    [' HARRY@MAIL.COM' ;,'洗车',' J53f512']

    我不知道从哪里开始这个,因为通常当我处理对象时,我知道密钥而我不必循环任何东西。但是在这种情况下,我必须以某种方式找到这个主对象中有多少个对象。 另外,我不能做像myObj [' J251525']这样的事情因为我不知道关于密钥J251525

    请注意,我使用的是带有角度2的打字稿。

3 个答案:

答案 0 :(得分:2)

您可以使用for..of循环,Object.entries()来创建对象的值并将其推送到数组中的数组

myObj = {
  "J251525": {
    "email": "TOM@MAIL.COM",
    "description": "CLEAN THE HOUSE",
    "refNumber": "J251525"
  },
  "J512912": {
    "email": "JAMES@MAIL.COM",
    "description ": "BRUSH HORSE",
    "refNumber": "J512912"
  },
  "J53f512": {
    "email": "HARRY@MAIL.COM",
    "description ": "WASH CAR",
    "refNumber": "J53f512"
  }
};

let arr = [];

for (let [, obj] of Object.entries(myObj)) {
  arr.push([]);
  for (let [, value] of Object.entries(obj)) {
    arr[arr.length - 1].push(value);
  }
};

console.log(arr)

您也可以将Array.prototype.map()替换为for..of循环以返回相同的结果

Object.entries(myObj).map(([,obj]) => Object.entries(obj).map(([,value]) => value))

答案 1 :(得分:2)

要将对象转换为所需格式,您可以使用:

var myObj = 
{
    "J251525" : {
        "email" : "TOM@MAIL.COM",
        "description" : "CLEAN THE HOUSE",
        "refNumber" : "J251525"
    },
    "J512912" : {
        "email" : "JAMES@MAIL.COM",
        "description" : "BRUSH HORSE",
        "refNumber" : "J512912"
    },
    "J53f512" : {
        "email" : "HARRY@MAIL.COM",
        "description" : "WASH CAR",
        "refNumber" : "J53f512"
    }
};

var result = Object.keys(myObj).map(function(key) {
  return [myObj[key].email, myObj[key].description, key];
});

console.log(result);

答案 2 :(得分:1)

试试这个:

for(key in myObj) {
        var holder = myObj[key];
        // here you can use the object however you like
        console.log(holder.email);
        console.log(holder.description);
        console.log(holder.refNumber);
    }

你不应该创建一个新对象,这将是一个不需要的操作,因为在一个普通的js数组中你将拥有相同的结构,但是你将拥有有序的整数(1,2,3等)而不是随机键。 ),当然,除非你需要你知道的钥匙,但我不这么认为。