Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中使用数组字典?_Javascript_Arrays_Object_Lodash - Fatal编程技术网

如何在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中找到一个实用程序库,让它更简单。