Необходимо классифицировать массив в соответствии с конкретными идентификаторами - PullRequest
0 голосов
/ 20 мая 2018

Здравствуйте, я работаю в java-скрипте и у меня возникли проблемы с сортировкой значений и получением суммы по категориям. У меня есть hotel_id и category_id.

    let myarray = [
  {
    price: 257,
    category: 1,
    hotel_id: 4
  },
  {
    price: 493,
    category: 1,
    hotel_id: 3
  },
  {
    price: 514,
    category: 1,
    hotel_id: 3
  },
  {
    price: 257,
    category: 1,
    hotel_id: 3
  },
{
    price: 104,
    category: 1,
    hotel_id: 3
  },
  {
    price: 295,
    category: 1,
    hotel_id: 3
  },
  {
    price: 125,
    category: 1,
    hotel_id: 2
  },
  {
    price: 125,
    category: 1,
    hotel_id: 2
  },
  {
    price: 157,
    category: 1,
    hotel_id: 2
  },
  {
    price: 125,
    category: 1,
    hotel_id: 2
  },
{
    price: 125,
    category: 1,
    hotel_id: 1
  },

  {
    price: 43,
    category: 1,
    hotel_id: 1
  },
  {
    price: 43,
    category: 2,
    hotel_id: 1
  },
  {
    price: 43,
    category: 2,
    hotel_id: 1
  }
];

var hotel_to_values = myarray.reduce(function (obj, item) {
    obj[item.hotel_id] = obj[item.hotel_id] || [];
    obj[item.hotel_id].push(item.category);
    return obj;
}, {});

var hotels = Object.keys(hotel_to_values).map(function (key) {
    return {hotel_id: key, category: hotel_to_values[key]};
});

Мне нужно отсортировать или сгруппировать что-то вроде этого

  • hotel 1
    • категория 1
      • цена 20
    • категория 2
      • цена 20, цена 30

сейчас мой результат

[
    {
        "hotel_id": "1",
        "category": [
            1,
            1,
            2,
            2
        ]
    },
    {
        "hotel_id": "2",
        "category": [
            1,
            1,
            1,
            1
        ]
    },
    {
        "hotel_id": "3",
        "category": [
            1,
            1,
            1,
            1,
            1
        ]
    },
    {
        "hotel_id": "4",
        "category": [
            1
        ]
    }
]

Мне нужны цены внутри категорий

Я обновляю свой код, теперь вы можете проверить, что на самом деле я делаю, да, я использую метод Reduce, но не могу получить фактический результат.

1 Ответ

0 голосов
/ 20 мая 2018

В вашем reduce() вы не разбиваете каждую категорию.Я не на 100% уверен в желаемом выводе для category, ниже используется объект с каждым уникальным значением в качестве ключа и массив цен для каждой категории

var hotel_to_values = myarray.reduce(function(obj, item) {
   const o = obj[item.hotel_id] = obj[item.hotel_id] || {};
   o[item.category] = (o[item.category]  || []).concat(item.price); 
  return obj;
}, {});

var hotels = Object.keys(hotel_to_values).map(function (key) {
    return {hotel_id: key, category: hotel_to_values[key]};
});


console.log(hotels)
.as-console-wrapper {max-height: 100%!important;}
<script>
  let myarray = [{
      price: 257,
      category: 1,
      hotel_id: 4
    },
    {
      price: 493,
      category: 1,
      hotel_id: 3
    },
    {
      price: 514,
      category: 1,
      hotel_id: 3
    },
    {
      price: 257,
      category: 1,
      hotel_id: 3
    },
    {
      price: 104,
      category: 1,
      hotel_id: 3
    },
    {
      price: 295,
      category: 1,
      hotel_id: 3
    },
    {
      price: 125,
      category: 1,
      hotel_id: 2
    },
    {
      price: 125,
      category: 1,
      hotel_id: 2
    },
    {
      price: 157,
      category: 1,
      hotel_id: 2
    },
    {
      price: 125,
      category: 1,
      hotel_id: 2
    },
    {
      price: 125,
      category: 1,
      hotel_id: 1
    },

    {
      price: 43,
      category: 1,
      hotel_id: 1
    },
    {
      price: 43,
      category: 2,
      hotel_id: 1
    },
    {
      price: 43,
      category: 2,
      hotel_id: 1
    }
  ];
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...