01 сентябрь 2021 07 сентябрь 2021 JavaScript


Когда необходимо обработать query_string из урла с помощью JS то самый простой и экономный вариант использовать URLSearchParams и reduce следующим образом

// распасить урл
const searchParams = new URLSearchParams(window.location.search.substring(1)); 

// преобразовать в обычный Объект
const params = [...searchParams.entries()].reduce((acm, x) => {return {...acm, [x[0]]: x[1] }}, {}); 

константа params будет содержать словарь с данными из запроса (исключая дубли)

Может статься так, что потребуется передать строку больше чем 2048 байт, в таком случае использовать  window.location.search не получится из-за ограничений GET запроса протокола HTTP.

Но можно воспользоваться дополнение window.location.hash это строка Хеш идущая после символа #

в таком случае чуть в код добавляет маленькая вставка

const searchParams1 = new URLSearchParams(
    window.location.search.substring(1) + '&' + window.location.hash.substring(1)
);

const args = [...searchParams1.entries()].reduce(
    (akm, x) => ({ ...akm, ...Object.fromEntries([x]) }), {},
);

 


12 июль 2021 14 июль 2021 JavaScript reduce рекурсия children


Для конвертирования иерархии любой вложенности удобно применять рекурсию совместно с reduce

function object_list_2_flat_array (obj_list) {

    var conv = function(xxx, x) {
        return [x, ...x["children"].reduce(conv, xxx)];
    };
    return obj_list.reduce(conv, new Array());

};

Тут накапливающий метод reduce вызывает рекурсию для каждого узла иерархии и результаты складывает в аккумулятор.