Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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/2/jquery/71.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_Jquery_Arrays_Json_Ecmascript 6 - Fatal编程技术网

Javascript 如何减少基于公共键值的对象数组?

Javascript 如何减少基于公共键值的对象数组?,javascript,jquery,arrays,json,ecmascript-6,Javascript,Jquery,Arrays,Json,Ecmascript 6,比方说,我有一个对象数组,看起来像: var jsonData=[ {“DS01”:123,“DS02”:888,“DS03”:1,“DS04”:2,“DS05”:3,“DS06”:666}, {“DS01”:123,“DS02”:888,“DS03”:2,“DS04”:3,“DS05”:4,“DS06”:666}, {“DS01”:124,“DS02”:99999,“DS03”:3,“DS04”:4,“DS05”:5,“DS06”:333}, {“DS01”:124,“DS02”:99999

比方说,我有一个对象数组,看起来像:

var jsonData=[
{“DS01”:123,“DS02”:888,“DS03”:1,“DS04”:2,“DS05”:3,“DS06”:666},
{“DS01”:123,“DS02”:888,“DS03”:2,“DS04”:3,“DS05”:4,“DS06”:666},
{“DS01”:124,“DS02”:99999,“DS03”:3,“DS04”:4,“DS05”:5,“DS06”:333},
{“DS01”:124,“DS02”:99999,“DS03”:5,“DS04”:6,“DS05”:7,“DS06”:333}

];您可以获得公共密钥并按它们分组

var data=[{DS01:123,DS02:888,DS03:1,DS04:2,DS05:3,DS06:666},{DS01:123,DS02:888,DS03:2,DS04:3,DS05:4,DS06:666},{DS01:124,DS02:9999,DS03:3,DS04:4,DS05:5,DS06:333},{DS01:124,DS02:9999,DS03:5,DS04:6,DS05:333},
普通的,
温度=数据减少((r,o,i)=>{
Object.entries(o.forEach)([k,v])=>{
r[k]=r[k]| |[];
r[k][i]=v;
});
返回r;
}, {}),
最小值=无穷大,
结果;
Object.entries(temp.forEach)([k,a])=>{
var s=新集合;
温度[k]=a.map(v=>s.add(v).size);
最小值=数学最小值(最小值,s.size);
});
common=Object.keys(temp.filter)(k=>temp[k][temp[k].length-1]==min);
结果=数据。减少((r,o)=>{
var temp=r.find(q=>common.every(k=>q[k]==o[k]);
如果(!temp){
r、 推动({…o});
}否则{
Object.keys(o).filter(k=>!common.includes(k)).forEach(k=>Array.isArray(temp[k])?temp[k].push(o[k]):(temp[k]=[temp[k],o[k]]);
}
返回r;
}, []);
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以使用reduce进行此操作,但是如果您没有显示到目前为止编写的代码,我们无法建议您对其进行更改,以使其符合您的要求。对于可预测的数据类型,属性为“数字或数组”意味着比简单地确保它始终是一个数组,具有一个或多个值,然后在代码中稍后检查
.length
。这不是。这些都是对象数组。你们总是有相同的共同点吗keys@NinaScholz是的,公用密钥组的计数相同。因为它们是从一个具有rowspan的表中格式化的。常用值来自合并的行。@Mike'Pomax'Kamermans我到目前为止所做的一切都是一团糟。这就是为什么我没有添加您要查找的代码段。但我想讨论的一件事是,我有一些解决方案,其中键名是在代码中定义的。但正如你们所看到的,我有其他不同的数据集,它们的结构非常相似,这让我感到困惑。