我有以下JSON响应:
{
"fruits": [
{
"name": "apple",
"prices": [
{
"small": 2,
"medium": 3,
"large": 5
}
]
},
{
"name": "banana",
"prices": [
{
"small": 1,
"medium": 3,
"large": 4
}
]
}
]
}
我想将其映射到一个新数组,以便获得每个水果的“ price.small”:
$scope.new_data = $scope.fruits.map(function(fruit){
return {
name: fruit.name,
price_small: fruit.prices.small
};
});
但这没用
最佳答案
您需要在Array
fruit.prices[0].small
中获得第一个元素,因为fruit.prices
是Array
,仅包含一个元素,而该元素是Object
var $scope = {};
$scope.fruits = [{
"name": "apple",
"prices": [{
"small": 2,
"medium": 3,
"large": 5
}]
}, {
"name": "banana",
"prices": [{
"small": 1,
"medium": 3,
"large": 4
}]
}, {
"name": "mango",
"prices": {
"small": 100,
"medium": 3,
"large": 4
}
}];
$scope.new_data = $scope.fruits.map(function(fruit){
return {
name: fruit.name,
price_small: Array.isArray(fruit.prices)
? fruit.prices[0].small
: (fruit.prices || {}).small || 0
};
});
console.log($scope.new_data);
更新:
fruit.prices
可以是带有一个元素的Object
或Array
,这就是为什么在示例中有条件对其进行检查的原因(Array.isArray
)