Создание сгруппированного массива на основе года из массива

1

У меня есть массив, который я хотел бы сгруппировать по Году. Например, у меня есть 6 записей в массиве и хотел бы создать массив двух измерений, сгруппированный по году, так что 2 записи за каждый год...

[4711.067999999985, 12596.399999999936, 12596.399999999936, "Accessories", "2011"]
[5277939.947800145, 8912342.140000183, 8912342.140000183, "Bikes", "2011"]
[16185.937500000333, 42468.34000000009, 42468.34000000009, "Accessories", "2012"]
[11725882.954398958, 19702448.459998813, 19702448.459998813, "Bikes", "2012"]
[168010.80079996982, 448815.8899998886, 448815.8899998886, "Accessories", "2013"]
[14915767.767399808, 24907912.949997608, 24907912.949997608, "Bikes", "2013"]

Я бы хотел, чтобы это был массив...

Array[0][0] = [4711.067999999985, 12596.399999999936, 12596.399999999936, "Accessories", "2011"]

Array[0][1] = [5277939.947800145, 8912342.140000183, 8912342.140000183, "Bikes", "2011"]

Array[1][0] = [16185.937500000333, 42468.34000000009, 42468.34000000009, "Accessories", "2012"]

Итак, Array[0] - 2011, Array[1] - 2012, Array[2] - 2013 и т.д.

Любая идея, как цикл через массив, а затем группа по году?

  • 1
    Всегда ли год будет последним индексом текущего массива?
  • 0
    если Array[0] is 2011 то почему Array[0][0] может иметь другое значение. Можете ли вы показать нам выходной пример.
Показать ещё 3 комментария
Теги:
arrays

3 ответа

0
Лучший ответ

let data = [ 
  [4711.067999999985, 12596.399999999936, 12596.399999999936, "Accessories", "2011"],
  [5277939.947800145, 8912342.140000183, 8912342.140000183, "Bikes", "2011"],
  [16185.937500000333, 42468.34000000009, 42468.34000000009, "Accessories", "2012"],
  [11725882.954398958, 19702448.459998813, 19702448.459998813, "Bikes", "2012"],
  [168010.80079996982, 448815.8899998886, 448815.8899998886, "Accessories", "2013"],
  [14915767.767399808, 24907912.949997608, 24907912.949997608, "Bikes", "2013"]
]

yearsList= ['2011', '2012', '2013']

groupByYear = {}

yearsList.map((year, index) => {
  groupByYear[index] = [];
  data.map(item => { 
    if(item.includes(year)){
      groupByYear[index].push(item)
    }
  })
})

console.log("groupBy Year", groupByYear, "\n**********END\n\n")

// If you want in 2D array then

let output = Object.values(groupByYear)

console.log("Year 2011 data", output[0]);
console.log("Year 2012 data", output[1]);
console.log("Year 2013 data",output[2]);
  • 0
    Привет Мохаммед, это работает - как я могу изменить его, чтобы индекс вместо года? - например, вместо 2011, 2012, 2013, являющихся именами массивов, 0, 1, 2 -?
  • 0
    пожалуйста, проверьте обновленный ответ.
Показать ещё 1 комментарий
1

Я бы рекомендовал использовать формат JSON для сохранения ваших данных (который отлично работает с JavaScript в качестве объекта). Это будет выглядеть так:

{
  "years": [
    {
      "id": 2011, 
      "value01": 4711.067999999985, 
      "value02": 12596.399999999936, 
      "value03": 12596.399999999936, 
      "type": "Accessories"
    }, 
    {
      "year": 2012, 

      ...

    }
  ]
}

В противном случае вы можете сохранить каждое значение, объединенное в одну строку, что не является лучшим решением для работы с ним позже. Вы можете найти дополнительную информацию о w3schools.

-2

Вы можете использовать хеш-таблицу для решения этой проблемы в O (n):

  const results = [], hash = {};

  for(const [v1, v2, v3, category, year] of input) {
    if(!hash[year]) {
      results.push(hash[year] = []);
    }
    hash[year].push([v1, v2, v3, category, year]);
 }
  • 0
    Не знаете, как использовать это ... является ли поддержка ввода текущим массивом?
  • 0
    @ Dustin Да, точно.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню