如何通过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 }]
答案 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)
您可以使用reduce
和Object.values
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;
如果您无法在nodejs版本上使用Object.values
,则可以:
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;