Все мои данные являются табличными данными, для эффективности хранения / передачи я хранил их как словарь массивов.
// 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 и т. Д., Было бы более полезным.