javascript: поиск в массиве, компактный код

213
18 апреля 2018, 07:32

Приветствую

у меня есть массив вида

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

Answer 1

В одну строчку:

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);

Правда я не уверен что это красивее)

READ ALSO
Подскажите как сократить код на jQuery (событие при hover)

Подскажите как сократить код на jQuery (событие при hover)

Доброго времени сутокПодскажите, пожалуйста как сократить код?

186
Открыть iframe в новой вкладке в Safari

Открыть iframe в новой вкладке в Safari

На странице есть динамические ссылки a открывающие iframe с панорамой

202
powershell InternetExplorer.Application как правильно отправить форму

powershell InternetExplorer.Application как правильно отправить форму

Добрый день! Столкнулся с задачей по автоматизации работы с браузером с помощью powershell

236
Аутентификация при запросах к API wex.nz

Аутентификация при запросах к API wex.nz

Пытаюсь подключиться к API wexnz, формирую запрос

172