Как работать со словарем массива в JavaScript? - PullRequest
1 голос
/ 12 июня 2019

Все мои данные являются табличными данными, для эффективности хранения / передачи я хранил их как словарь массивов.

// take the following tabular data for e.g.
// | somecol1 | somecol2 | somecol3 |
// | c1r1     | c2r1     | c3r1     |
// | c1r2     | c2r2     | c3r2     |
// 
// instead of 
[ {somecol1:c1r1, somecol2:c2r1, somecol3:c3r1 ....}, ... ]  // Scheme I
// I got 
{ somecol1:[c1r1, c1r2, c1r3...], somecol2:[c2r1, ...]... }  // Scheme II

В настоящее время я использую последнюю схему, она позволяет избежать избыточности.Я мог легко и быстро получить тысячи записей.Но в то же время он сделал базовые вещи не такими удобными, как массив объектов для обработки.Я не хочу преобразовывать их обратно в массив объектов при обработке.

Я довольно давно не использовал JavaScript.Я не совсем знаком с lodash.Я считаю, что работать с этим объектом совсем не удобно.например, для фильтрации строк, где col1 = val1 и col2 = val2

Я делаю _filter( dict_of_array, [{col1:val1}, {col2:val2}]), где _filter - моя пользовательская функция, как показано ниже.

// keypairs = [{key1:key_value1}, ...] 
function _filter( dict, kpairs ) { 
var dict_keys = _.keys(dict);
var bitmask = _.map(Array(dict[dict_keys[0]].length),function(){return true});
_.each(kpairs,function(kpair){
    _.each(kpair,function(kval, key){
        _.each(dict[key], function(item, idx){
            bitmask[idx] = bitmask[idx] && (item == kval);
        })
    });
});
var result = {};
_.each(dict_keys, function(k){ result[k] = []; });
_.each(bitmask, function(v, idx){
    _.each(dict_keys, function(k){
        if(bitmask[idx]) result[k].push(dict[k][idx]); 
    });
})
return result;
}

по сравнению с работой с массивомобъектов:

_.filter(scheme1, ['col1', 'val1', 'col2', 'val2'] )

Сложнее, а сортировка по нескольким столбцам хуже.То, как я использую lodash, не экономит много времени.

Должен быть более эффективный способ фильтрации / сортировки / извлечения записей из объектов этого типа (без преобразования их в массив объектов).Я просто не знаю.

Если Лодаш не подходит.Я предполагаю, что должны быть другие общие библиотеки для работы с ними?

Я думаю, что alasql.js, но он ориентирован на SQL.Несколько более распространенных способов в JavaScript, например, используя jQuery и т. Д., Было бы более полезным.

...