2017-10-06 135 views
-1

我有一个对象:正确构建对象的数组

cars = { 
    'toyota': { 
    'year': 2015, 
    'color': 'blue' 
    }, 
    'mazda': { 
    'year': 2017, 
    'color': 'white' 
    } 
} 

我想通过车在cars对象进行迭代并将它们推到另一个阵列。

for (carMake in cars) { 
    $scope.newCarsArray.push(cars[carMake]); 
} 

上面正确地推动各carMake物体插入$scope.newCarsArray阵列。然而,这只会推动内容(例如:年份和颜色),而不是车辆名称(如丰田和马自达)。如何在不更改原始对象的情况下将每个整个对象(包括车辆名称)都推送到$scope.newCarsArray

我认为以下方法可行,但它只是将汽车制造对象名称作为字符串

for (carMake in cars) { 
    $scope.newCarsArray.push(carMake); 
} 

所需的输出:

$scope.newCarsArray = [ 
    { 
    toyota: { 
     'year': 2015, 
     'color': 'blue' 
    } 
    }, 
    { 
    mazda: { 
     'year': 2017, 
     'color': 'white' 
    } 
    } 
]; 
+2

什么是理想的输出? –

回答

1

在情况下,如果你需要car作为阵列项目的一部分:

angular.forEach(cars, function(item, key) { 
    var newItem = item; 
    newItem.car = key; 
    $scope.newCarsArray.push(newItem); 
    }); 

输出:

[ 
    { 
    "year": 2015, 
    "color": "blue", 
    "car": "toyota" 
    }, 
    { 
    "year": 2017, 
    "color": "white", 
    "car": "mazda" 
    } 
] 

Demo Fiddle

+0

不是我正在寻找的结构,但是这个工作。谢谢 – bruh

1

创建一个键名称的新对象,并推送:

Objects.keys(cars).forEach(function(car) { 
    $scope.newCarsArray.push({ 
     [car]:cars[car] 
    }); 
}); //Outputs like: [{"toyota": {}}, ..] 
+0

我在小提琴中试过这个,就像一个魅力。谢谢。我无法在我的项目中工作,因为我的棉绒在'[汽车]:汽车[汽车]'线上被吓坏了。 – bruh

+0

@bruh - 是的,我相信这是ES6的语法。 – tymeJV