如何在javascript中使用数组字典?
我所有的数据都是表格数据,为了存储/传输效率,我将它们存储为数组字典如何在javascript中使用数组字典?,javascript,arrays,object,lodash,Javascript,Arrays,Object,Lodash,我所有的数据都是表格数据,为了存储/传输效率,我将它们存储为数组字典 // take the following tabular data for e.g. // | somecol1 | somecol2 | somecol3 | // | c1r1 | c2r1 | c3r1 | // | c1r2 | c2r2 | c3r2 | // // instead of [ {somecol1:c1r1, somecol2:c2r1, somec
// 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了。我对洛达斯不太熟悉。
我发现使用这些对象根本不方便。e、 g.筛选col1=val1
和col2=val2
我使用\u过滤器(dict\u数组,[{col1:val1},{col2:val2}])
,其中\u过滤器是我的用户函数,如下所示
// 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的方式不会节省很多时间
必须有一种更有效的方法从此类对象中筛选/排序/弹出记录(而不将它们转换为对象数组)。我只是不知道
如果lodash不适合。我想应该有其他共同的库与他们一起工作
我考虑的是alasql.js,但它是面向SQL的。JavaScript中一些更常见的方法,例如使用jQuery等,会更有帮助。对于与col1
相关的val2
、val3
,会发生什么情况?您能给出一个您期望的输入和输出的示例吗?我迷路了如果你有一段时间没有写JS,你可能会有兴趣了解更多关于现代JS的知识。您现在使用的lodash函数是常规的JS函数。使用对象数组的库和内置方法比使用数组对象的库和内置方法多,这是有原因的;这就是问题域通常的建模方式。从逻辑上讲,你有很多东西,每个东西都有带值的属性——你没有一个东西有带多个值的属性。我理解效率方面,但是看到你的代码,你可能已经达到了处理“高效”存储方法所需的代码量超过了你节省的存储量的地步。嗨,我更新了这篇文章。希望现在已经清楚了@异端猴子,这是对我现在处境的准确描述:-)。我正在浏览器中缓存大量db数据,以创建半脱机模式。它减少了延迟,减少了查询。但它变得越来越复杂。我希望我能在js中找到一个实用程序库,使之更简单。同样与col1
相关的val2
、val3
会发生什么情况?您能给出一个您期望的输入和输出示例吗?我迷路了如果你有一段时间没有写JS,你可能会有兴趣了解更多关于现代JS的知识。您现在使用的lodash函数是常规的JS函数。使用对象数组的库和内置方法比使用数组对象的库和内置方法多,这是有原因的;这就是问题域通常的建模方式。从逻辑上讲,你有很多东西,每个东西都有带值的属性——你没有一个东西有带多个值的属性。我理解效率方面,但是看到你的代码,你可能已经达到了处理“高效”存储方法所需的代码量超过了你节省的存储量的地步。嗨,我更新了这篇文章。希望现在已经清楚了@异端猴子,这是对我现在处境的准确描述:-)。我正在浏览器中缓存大量db数据,以创建半脱机模式。它减少了延迟,减少了查询。但它变得越来越复杂。我希望我能在js中找到一个实用程序库,让它更简单。