2017-06-06 65 views
1

大家好我使用的JavaScript我試圖對象的值推到一個數組這裏我重視我的代碼怎麼推子數組對象到一個數組中的JavaScript

var data = [{ 
      BuildingID: "56", FloorId: "65", volume: [{ 

       one: 12, 
       two: 15, 
       three: 12 
      }] 
     }] 

var MainInfo=[]; 
      for (i = 0; i < data.length; i++) { 

       var obj = {} 
       obj.BuildingID = data[i].BuildingID; 
       obj.FloorId = data[i].FloorId; 
       obj.volume = data[i].volume[0]; 
       MainInfo.push(obj); 

      } 

它的工作,但並不完全適用在這裏我提到的除外輸出我應該怎麼需要

電流輸出

enter image description here

預期輸出

enter image description here

注:數據量是動態幫助如何做到這一點

+2

(這是很高興終於見到的JavaScript人):-) – trincot

+1

我很高興的! –

+0

我已經更新了我的問題:) @ trincot – jose

回答

1

循環量,並得到鑰匙

var data = [{ 
 
      BuildingID: "56", FloorId: "65", volume: [{ 
 

 
       one: 12, 
 
       two: 15, 
 
       three: 12 
 
      }] 
 
     }]; 
 

 
var MainInfo=[]; 
 
    for (var i = 0; i < data.length; i++) { 
 

 
     var obj = {}; 
 
     obj.BuildingID = data[i].BuildingID; 
 
     obj.FloorId = data[i].FloorId; 
 
     
 
     for(var j in data[i].volume[0]){ 
 
     
 
     obj[j]= data[i].volume[0][j]; 
 
     } 
 
     MainInfo.push(obj); 
 

 
    } 
 
      
 
      console.log(MainInfo);

+0

它通常是用'hasOwnProperty'支票或相當於跳過潛在的繼承屬性是個好主意。 – jcaron

+0

@jcaron感謝您的建議。 –

0

Object.key()Object.values()功能。而Array#forEach用於遍歷數組.Don't鐵桿與​​.batter與迭代嘗試的forEach

var data = [{ BuildingID: "56", FloorId: "65", volume: [{ one: 12, two: 15, three: 12}] }] 
 

 
var MainInfo=[]; 
 
      for (i = 0; i < data.length; i++) { 
 
       var obj = {} 
 
       obj.BuildingID = data[i].BuildingID; 
 
       obj.FloorId = data[i].FloorId; 
 
       data[i].volume.forEach(function(a,c){ 
 
       Object.keys(data[i].volume[c]).forEach(function(a,b){ 
 
        obj[a] = Object.values(data[i].volume[c])[b] 
 
       }) 
 
       }) 
 
       MainInfo.push(obj); 
 
      } 
 
      console.log(MainInfo)

+0

不太清楚使用的點'Object.values'可能是,當你可以直接訪問原始的對象,特別是考慮到'Object.values'支持是非常有限的。 – jcaron

+0

@jcaron對於運算要求'Object.values'足夠.'Object.value'陣列是'object.key'陣列的相同長度爲何我使用。而具有尊敬鍵陣列 – prasanth

+0

值的相同的位置使用'Object.values'沒有理由過度複雜。當你可以寫數據[i] .volume [c] [a]'時,你寫'Object.values(data [i] .volume [c])[b]'。另外,有很多瀏覽器不支持它。 – jcaron

2

這應該爲你工作

var data = [ 
 
\t { 
 
\t \t BuildingID : "56", 
 
\t \t FloorId : "65", 
 
\t \t volume : [ 
 
\t \t \t { 
 
\t \t \t \t one : 12, 
 
\t \t \t \t two : 15, 
 
\t \t \t \t three : 12 
 
\t \t \t } 
 
\t \t ] 
 
\t } 
 
]; 
 
var MainInfo = []; 
 
for (i = 0; i < data.length; i++) { 
 
\t var obj = {}; 
 
\t obj.BuildingID = data[i].BuildingID; 
 
\t obj.FloorId = data[i].FloorId; 
 
\t Object.getOwnPropertyNames(data[i].volume[0]).forEach(function (key) { 
 
\t \t \t obj[key] = data[i].volume[0][key]; 
 
\t }); 
 
\t MainInfo.push(obj); 
 
} 
 
console.log(MainInfo);

0

您可以使用函數像這樣的:你還沒有完全描述,如果有更多的應該發生什麼

function copyProperties(sourceObject, destinationObject) 
{ 
    var k; 
    for (k in sourceObject) 
    { 
     if (sourceObject.hasOwnProperty(k)) 
     destinationObject[k] = sourceObject[k]; 
    } 
} 

注而不是volume陣列中的一個對象。

0

您可以使用Object.assign將所有屬性分配給另一個對象。

var data = [{ BuildingID: "56", FloorId: "65", volume: [{ one: 12, two: 15, three: 12 }] }], 
 
    mainInfo = [], 
 
    i, obj; 
 

 
for (i = 0; i < data.length; i++) { 
 
    obj = {} 
 
    obj.BuildingID = data[i].BuildingID; 
 
    obj.FloorId = data[i].FloorId; 
 
    mainInfo.push(Object.assign(obj, data[i].volume[0])); 
 
} 
 

 
console.log(mainInfo);

+0

請注意,IE或大多數Android瀏覽器不支持「Object.assign」,您需要爲這些瀏覽器添加填充。 – jcaron

+0

@jcaron,對,但是新標準是帶有Object.assign的ES6。仍然可以迭代所需的屬性並手工分配,但要知道,這是一種直接分配一大堆屬性的新方法,這是一個優點。 –

1

如果你想如果你正在使用jQuery的期望的輸出只是

var MainInfo=[]; 
     for (i = 0; i < data.length; i++) { 

      var obj = {} 
      obj.BuildingID = data[i].BuildingID; 
      obj.FloorId = data[i].FloorId; 
      obj.one = data[i].volume[0].one; 
      obj.three = data[i].volume[0].three; 
      obj.two = data[i].volume[0].two; 

      MainInfo.push(obj); 

     } 
+0

注:數據量是動態幫助如何做到這一點 – jose

0

更換第二部分,你可以使用$.extend(obj, volume[0])

1

有很多正確的答案已經存在,但是你可以使用ES6 Arrow功能以最小的語法來實現這一目標的。

var MainInfo = data.map(x=>{ return { 
     "BuildingID" : x.BuildingID, 
     "FloorId" : x.FloorId, 
     "one" : x.volume[0]["one"], 
     "two" : x.volume[0]["two"], 
     "three" : x.volume[0]["three"], 
    }}) 

更多箭頭功能here

相關問題