У меня есть массив, который я хотел бы сгруппировать по Году. Например, у меня есть 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 и т.д.
Любая идея, как цикл через массив, а затем группа по году?
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]);
Я бы рекомендовал использовать формат JSON для сохранения ваших данных (который отлично работает с JavaScript в качестве объекта). Это будет выглядеть так:
{
"years": [
{
"id": 2011,
"value01": 4711.067999999985,
"value02": 12596.399999999936,
"value03": 12596.399999999936,
"type": "Accessories"
},
{
"year": 2012,
...
}
]
}
В противном случае вы можете сохранить каждое значение, объединенное в одну строку, что не является лучшим решением для работы с ним позже. Вы можете найти дополнительную информацию о w3schools.
Вы можете использовать хеш-таблицу для решения этой проблемы в 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]);
}
Array[0] is 2011
то почемуArray[0][0]
может иметь другое значение. Можете ли вы показать нам выходной пример.