我有以下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.pricesArray,仅包含一个元素,而该元素是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可以是带有一个元素的ObjectArray,这就是为什么在示例中有条件对其进行检查的原因(Array.isArray

09-10 05:18
查看更多