如何在javascript中将子数组对象推送到一个数组中

时间:2017-06-06 08:59:04

标签: javascript arrays

大家好我正在使用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

注意:在数据量是动态帮助如何做到这一点

8 个答案:

答案 0 :(得分:3)

这应该对你有用

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;
	Object.getOwnPropertyNames(data[i].volume[0]).forEach(function (key) {
			obj[key] = data[i].volume[0][key];
	});
	MainInfo.push(obj);
}
console.log(MainInfo);

答案 1 :(得分:2)

循环音量和获取键

&#13;
&#13;
NAME_IT
&#13;
&#13;
&#13;

答案 2 :(得分:2)

已经有很多正确答案,但您可以使用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

答案 3 :(得分:1)

尝试使用Object.key()Object.values()函数。和Array#forEach用于迭代数组.Don&#39; t hardcore with volume[0] .batter iterate with forEach

&#13;
&#13;
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)
&#13;
&#13;
&#13;

答案 4 :(得分:1)

如果你想要这个预期的输出,只需用

替换第二部分
classic

答案 5 :(得分:0)

你可以使用这样的功能:

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

请注意,如果volume数组中有多个对象,您还没有完全描述会发生什么。

答案 6 :(得分: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);

答案 7 :(得分:0)

如果您使用的是jQuery,则可以使用$.extend(obj, volume[0])