[注意:虽然类似于this stack question,但由于初始变量的结构不同,我的问题显着不同(IMO)。我是一个数组,另一个提问者是一个对象。我的数组包含嵌套的对象/数组,后者包含名称 - 值对,其值与其他提问者中的对不同,不进行语义标识。]
我有一个包含24个对象的大数组(arr1
)。 24个对象中的每一个都包含一个对象,以及一个包含六个其他对象的数组,如下所示:
var arr1 =
[
{'hour':1,'car':[{'audi':1377},{'bmw':716},{'ford':3819},{'mazda':67},{'toyota':11580},{'tesla':0}]},
{'hour':2,'car':[{'audi':1340},{'bmw':709},{'ford':3420},{'mazda':28},{'toyota':11583},{'tesla':0}]},
...etc, up to hour 24
];
如您所见,24个物体中的每一个都代表了一小时的汽车模型和里程数据。 (不明显的是,六个对象中每个对象的数值代表英里数。)
现在,我想将arr1
中的每个对象转换为包含六个对象的一个数组,如下所示。因此,arr1
中的小时1数据将转换为:
var arr2 = [{"car":"audi","miles":1377},{"car":"bmw","miles":716},{"car":"ford","miles":3819},{"car":"mazda","miles":67},{"car":"toyota","miles":11580},{"car":"tesla","miles":0}];
我该怎么做?我尝试过以下方法:
var hourx = 1;
var hour = arr1[hourx-1];
var car=hour.car;
for(var hourx1=0;hourx1<car.length;hourx1++){
var xx = car[hourx1];
var newobj = [];
for (var value in xx) {
var chartvar = newobj.push({car:value,miles:xx[value]});
var arr2 = newobj;
}
}
...但如果我console.log(arr2);
它只给出一个对象的数组。
我很难过。有人知道我怎么能做到这一点吗?
答案 0 :(得分:2)
所以你想要一个数组数组作为最终结果吗?
var arr1 = [
{'hour':1,'car':[{'audi':1377},{'bmw':716},{'ford':3819},{'mazda':67},{'toyota':11580},{'tesla':0}]},
{'hour':2,'car':[{'audi':1340},{'bmw':709},{'ford':3420},{'mazda':28},{'toyota':11583},{'tesla':0}]}
];
var arr2 = arr1.map(function(hour){
return hour.car.map(function(car){
var carName = Object.keys(car)[0];
return {
"car": carName,
"miles": car[carName]
}
})
})
答案 1 :(得分:1)
尝试使用Object.keys()
,var arr1 = [{
'hour': 1,
'car': [{
'audi': 1377
}, {
'bmw': 716
}, {
'ford': 3819
}, {
'mazda': 67
}, {
'toyota': 11580
}, {
'tesla': 0
}]
}, {
'hour': 2,
'car': [{
'audi': 1340
}, {
'bmw': 709
}, {
'ford': 3420
}, {
'mazda': 28
}, {
'toyota': 11583
}, {
'tesla': 0
}]
}];
var hours = arr1.map(function(cars, index) {
var carNames = Object.keys(cars.car);
var names = carNames.map(function(c) {
var name = Object.keys(cars.car[c])[0];
var res = {};
res["car"] = name;
res["miles"] = cars.car[c][name];
return res
})
return names
})
console.log(hours)
var keys = Object.keys(friends);
for( i = 0; i < keys.length; i++ ) {
var theFriend = friends[keys[i]].name;
alert(theFriend);
}
答案 2 :(得分:0)
你必须迭代数组。获得第一个属性(让我们希望它保持这种方式)。然后得到它的价值。然后创建一个对象并将其添加到数组中。见fiddle here
bar
答案 3 :(得分:0)
reduce
和map
的组合会有所帮助。 /例如:
var
arr1 =[
{'hour':1,'car':[{'audi':1377},{'bmw':716},{'ford':3819},{'mazda':67},{'toyota':11580},{'tesla':0}]},
{'hour':2,'car':[{'audi':1340},{'bmw':709},{'ford':3420},{'mazda':28},{'toyota':11583},{'tesla':0}]}
],
arr2 = arr1.reduce(function (collector, item) {
collector.push(item.car.map(function (car/*, idx, list*/) {
var
make = Object.keys(car)[0]
;
return {
"car" : make,
"miles" : car[make]
}
}));
return collector;
}, [])
;
console.log("arr2 : ", arr2);