2017-02-06 104 views
0

從Firebase下載我的數據後,返回的對象是一個包含多個子對象的對象。用隨機密鑰處理JavaScript對象

myObj = 
{ 
    "J251525" : { 
     "email" : "[email protected]", 
     "description" : "CLEAN THE HOUSE", 
     "refNumber" : "J251525" 
    }, 
    "J512912" : { 
     "email" : "[email protected]", 
     "description " : "BRUSH HORSE", 
     "refNumber" : "J512912" 
    }, 
    "J53f512" : { 
     "email" : "[email protected]", 
     "description " : "WASH CAR", 
     "refNumber" : "J53f512" 
    } 
}; 

我要擊穿這個數據,這樣我可以用它來顯示我的THEAD/TBODY在HTML類似下面的佈局

screen shot

所以我需要

  1. 以某種方式通過查看myObj創建['email','description','refNumber']的數組。
  2. 遍歷所述對象(這是可能的與對象?),並創建多個陣列狀

[ '[email protected]', '打掃房間', 'J251525']

[ '[email protected]', '刷馬', 'J512912']

[ '[email protected]', '洗車', 'J53f512']

我不知道從哪裏開始這個beca當我處理對象時正常使用,我知道這個關鍵,我不需要循環任何東西。然而在這種情況下,我不得不以某種方式找到這個主對象內有多少個對象。 另外,我不能做這樣的事情MyObj中[「J251525」],因爲我不知道那鑰匙J251525

請注意,我用的打字稿與角2

+0

您記下了一個關鍵字「描述」而不是「描述」,如果不是故意的,您可能想編輯該描述。 – victor175

+0

請Firebase將其作爲數組(「列表」)提供給您。 –

回答

2

將對象轉換到你所需要的格式,你可以使用這個:

var myObj = 
 
{ 
 
    "J251525" : { 
 
     "email" : "[email protected]", 
 
     "description" : "CLEAN THE HOUSE", 
 
     "refNumber" : "J251525" 
 
    }, 
 
    "J512912" : { 
 
     "email" : "[email protected]", 
 
     "description" : "BRUSH HORSE", 
 
     "refNumber" : "J512912" 
 
    }, 
 
    "J53f512" : { 
 
     "email" : "[email protected]", 
 
     "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

您可以使用for..of循環參選,Object.entries()創建和陣列

myObj = { 
 
    "J251525": { 
 
    "email": "[email protected]", 
 
    "description": "CLEAN THE HOUSE", 
 
    "refNumber": "J251525" 
 
    }, 
 
    "J512912": { 
 
    "email": "[email protected]", 
 
    "description ": "BRUSH HORSE", 
 
    "refNumber": "J512912" 
 
    }, 
 
    "J53f512": { 
 
    "email": "[email protected]", 
 
    "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

當我將鼠標懸停在紅線所在的條目上時,「屬性」條目在「類型對象構造函數中不存在」。 – user172902

+1

@ user172902請參閱[polyfill](https://github.com/tc39/proposal-object-values-entries)瞭解Object.entries()。 「 – guest271314

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等等),當然除非你需要知道鑰匙,但我不這麼認爲。

+0

」找不到名字「鍵」,當我將鼠標懸停在for循環中的鍵上時,其他答案爲我工作啦啦啦 – user172902

+0

不應該有問題,你能進一步解釋嗎? – victor175

+0

啊..看起來我需要一個let鍵。 – user172902