创建新的数组数组,数组中包含对象,javascript

创建新的数组数组,数组中包含对象,javascript,javascript,arrays,Javascript,Arrays,我有一组像这样的对象 var array = [ {car : {id:123}, count: 2, rule: {id:55, color: "red"}}, {car : {id:456}, count: 5, rule: {id:15, color: "blue"}}, {car : {id:883}, count: 1, rule: {id:557, color: "green"}} ... ]; var newArray = [ {carId : 123, count:2, rul

我有一组像这样的对象

var array = [
{car : {id:123}, count: 2, rule: {id:55, color: "red"}},
{car : {id:456}, count: 5, rule: {id:15, color: "blue"}},
{car : {id:883}, count: 1, rule: {id:557, color: "green"}}
...
];
var newArray = [
{carId : 123, count:2, ruleId:55},
{carId : 456, count:5, ruleId:15},
{carId : 883, count:1, ruleId:557}
]
数组是对象的数组,汽车是带有id的对象,规则是带有id和颜色的对象

我想循环遍历数组并创建如下所示的新数组

var array = [
{car : {id:123}, count: 2, rule: {id:55, color: "red"}},
{car : {id:456}, count: 5, rule: {id:15, color: "blue"}},
{car : {id:883}, count: 1, rule: {id:557, color: "green"}}
...
];
var newArray = [
{carId : 123, count:2, ruleId:55},
{carId : 456, count:5, ruleId:15},
{carId : 883, count:1, ruleId:557}
]
所以我想从对象数组中的对象中提取值


如果可能的话,我希望使用Array.map或Array.forEach在ES5或ES6中实现这一点。

您可以通过创建一个新数组来实现这一点,然后在每次迭代中使用当前对象的属性创建一个新对象

var数组=[{
汽车:{
身份证号码:123
},
计数:2,
规则:{
身份证号码:55,
颜色:“红色”
}
}, {
汽车:{
身份证号码:456
},
计数:5,
规则:{
身份证号码:15,
颜色:“蓝色”
}
}, {
汽车:{
身份证号码:883
},
计数:1,
规则:{
身份证号码:557,
颜色:“绿色”
}
}];
var newArray=array.map(函数(obj){
返回{
carId:obj['car']['id'],
计数:obj['count'],
规则id:obj['rule']['id']
};
});

log(newArray)使用地图,您可以轻松获得您想要的:

var数组=[
{car:{id:123},计数:2,规则:{id:55,颜色:“红色”},
{car:{id:456},计数:5,规则:{id:15,颜色:“蓝色”},
{car:{id:883},计数:1,规则:{id:557,颜色:“绿色”}
];
var newArray=array.map(x=>({carId:x.car.id,count:x.count,ruleId:x.rule.id}));

log(newArray)这正是Array.map所做的。作为一般建议,在堆栈溢出时,在请求帮助之前,您至少应该自己尽最小的努力解决任务。请说明您所做的尝试使用
Array.prototype.map
是可行的,但是使用forEach也是可行的。请尝试一下,并让我们知道它是如何运行的
var res=Array.map((elem)=>{return{carId:elem.car.id,count:elem.count,ruleId:elem.rule.id})
我认为没有必要使用
Object.create()
。您只需返回Object-literal即可。很好的调用。更新了我的答案,使之更加简洁。