组JSON阵列数据如何通过多个键

时间:2018-04-27 16:38:28

标签: javascript json node.js group-by grouping

如何通过Nodejs中的多个键对JSON数组进行分组。

有没有下划线或lodash的解决方案(如果它的普通javascript无关紧要)?

阵列:

[{ key: '2017-1', y: 1, gkey: 'y' },
{ key: '2017-1', x: 1, gkey: 'x' }]

预期结果:

[{ key: '2017-1', x: 1, y:1 }]

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的需求,reduce功能可以满足您的需求。

reduce为数组的每个元素调用函数。 arr是结果数组,最后由reduce返回。如果elem中有arr,我会检查每个arrayOfData.reduce((arr, elem) => { let e = arr.find(el => el.key === elem.key); if(!e) { e = {key : elem.key} arr.push(e); } e[elem.gkey] = elem[elem.gkey]; return arr; }, []) 。如果没有,我加上它。

我没有测试这段代码,但它应该可以运行

<?php 
       $qpquery="SELECT COUNT(id) AS total FROM question WHERE FMid=$tid";
         $qprs=mysqli_query($conn,$qpquery) or  die("database error:". mysqli_error($conn));
         if ($qprs->num_rows > 0) {
             while($qpro = $qprs->fetch_assoc()) {
         $total=$qpro["total"]; 
         }  
             echo $total;
         }        
     for ($j = 1 ; $j <= $total; $j++)
         {            
?> 


<?php  echo $_SESSION['mark_ques'][$j]; 
     foreach($_SESSION['mark_ques'] as $storeanswer){
         $flag = 0;
         if ($storeanswer == $j){
             $flag = 1;
             break;
         }
     }          
        if($flag == 1){?> 

  <button type="button" class="button button5" style="background-color:Green;">
  <?php echo $j ; ?> </ton>

答案 1 :(得分:1)

您可以使用reduceObject.values

&#13;
&#13;
let arr = [ 
   { key: '2017-1', y: 1, gkey: 'y' },
   { key: '2017-1', x: 1, gkey: 'x' },
   { key: '2017-2', x: 1, gkey: 'x' },
];

let result = Object.values(arr.reduce((c, {key,gkey,...r}) => {
  c[key] = c[key] || {key};
  c[key] = Object.assign(c[key], r);
  return c;
}, {}));

console.log(result);
&#13;
&#13;
&#13;

如果您无法在nodejs版本上使用Object.values,则可以:

&#13;
&#13;
let arr = [ 
   { key: '2017-1', y: 1, gkey: 'y' },
   { key: '2017-1', x: 1, gkey: 'x' },
   { key: '2017-2', x: 1, gkey: 'x' },
];

let temp = arr.reduce((c, {key,gkey,...r}) => {
  c[key] = c[key] || {key};
  c[key] = Object.assign(c[key], r);
  return c;
}, {});

let result = [];
for (let key in temp) result.push(temp[key]);

console.log(result);
&#13;
&#13;
&#13;