2016-12-23 4 views
0

у меня есть массив объектов, который выглядит как этотСоздать новый массив из массива с объектами, которые имеют объекты внутри, JavaScript

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} 
] 

Так что я хочу, чтобы вытащить значения из объектов, находящихся внутри объекты моего массива объектов.

Если возможно, я хотел бы с этим использовать ES5 или ES6, используя Array.map или Array.forEach.

+3

Это именно то, что делает Array.map. В качестве общей рекомендации в Stack Overflow вы должны, по крайней мере, приложить минимальные усилия, чтобы решить задачу самостоятельно, прежде чем обращаться за помощью. –

+2

Пожалуйста, покажите, что вы пробовали – KooiInc

+0

Это возможно с помощью 'Array.prototype.map', но с помощью forEach можно также дать ему попробовать и сообщить нам, как это происходит. – Dalorzo

ответ

0

С картой вы будете easyly получить то, что вы ecpect:

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 = array.map(x => ({carId: x.car.id, count: x.count, ruleId: x.rule.id})) ; 
 

 
console.log(newArray);

0

Вы можете сделать это, создав новый массив через map() и оттуда создайте новый объект на каждой итерации с использованием атрибутов текущего объекта.

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 = array.map(function(obj) { 
 
    return { 
 
    carId: obj['car']['id'], 
 
    count: obj['count'], 
 
    ruleId: obj['rule']['id'] 
 
    }; 
 
}); 
 

 
console.log(newArray);

+0

Я не думаю, что' Object.create() 'необходимо. Вы можете просто вернуть литерал объекта. –

+0

Хороший звонок. Обновленный мой ответ, чтобы стать немного более кратким. –

Смежные вопросы