Приветствую
у меня есть массив вида
let ranges = [
{
min: 10,
max: 10,
},
{
min: 30,
max: 40,
},
]
массив значений
let data = {
10: {},
17: {},
32: {},
}
Нужно построить из массива data на основании данных из массива range новый массив:
let new_data = {
10: {},
32: {},
}
Как это сделать красиво и оптимально, без большого кол-ва строчек кода?
Сейчас сделал школьным методом в лоб:
let new_data = {};
for (const index in data)
{
for (const range of ranges)
{
if ((index >= range.min) && (index <= range.max))
{
new_data[index ] = articles[index ];
break;
}
}
}
А можно ли как-то сделать покрасивее код? Уровня "в одну строчку" средствами JavaScript
В одну строчку:
const ranges = [
{
min: 10,
max: 10,
},
{
min: 30,
max: 40,
},
];
const data = {
10: {},
17: {},
32: {},
33: {},
41: {}
}
let new_data = Object.keys(data).filter(index => ranges.find(range => index >= range.min && index <= range.max)).reduce((new_data, index) => Object.assign(new_data, {[index]: data[index]}), {});
console.log(new_data);
Правда я не уверен что это красивее)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей