Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 JS基于键值和附加值通过数组循环_Javascript_Arrays_Object - Fatal编程技术网

Javascript JS基于键值和附加值通过数组循环

Javascript JS基于键值和附加值通过数组循环,javascript,arrays,object,Javascript,Arrays,Object,我在数组中有以下对象:- [ {"score": 5, "question": 0, "weight": 2}, {"score": 4, "question": 1, "weight": 2}, {"score": 3, "question": 0, "weight": 4}, {"score": 4, "question": 1, "weight": 4}, {"score": 2, "question": 2, "weight": 4}, {"score": 8, "quest

我在数组中有以下对象:-

[
 {"score": 5, "question": 0, "weight": 2},
 {"score": 4, "question": 1, "weight": 2},
 {"score": 3, "question": 0, "weight": 4},
 {"score": 4, "question": 1, "weight": 4},
 {"score": 2, "question": 2, "weight": 4},
 {"score": 8, "question": 0, "weight": 2}
]
我正在尝试循环数组,因此我有以下输出,因此我能够对结果运行一些数学运算:-

[
  [
    {"score": 5, "question": 0, "weight": 2},
    {"score": 4, "question": 1, "weight": 2}
  ],
  [
    {"score": 3, "question": 0, "weight": 4},
    {"score": 4, "question": 1, "weight": 4},
    {"score": 2, "question": 2, "weight": 4}
  ],
  [
    {"score": 8, "question": 0, "weight": 2}
  ]
];
有没有一种动态的方法可以让array1看起来像array2

我使用的是平面JS,请不要回答jQuery

提前谢谢

**注**


有时每个部分都会有或多或少的值,这就是为什么我要求它是动态的。

您可以使用
reduce()
方法来实现这一点,您只需要跟踪最终数组的当前索引

const数据=[
{分数:5,问题:0,权重:2},
{分数:4,问题:1,权重:2},
{分数:3,问题:0,权重:4},
{分数:4,问题:1,权重:4},
{分数:2,问题:2,权重:4},
{分数:8,问题:0,权重:2}
]
const result=data.reduce(函数(r,e,i){
如果(i==0)r={值:[],计数器:0}
如果(e.question==0&&i!=0)r.计数器++
如果(!r.values[r.counter])r.values[r.counter]=[e]
else r.values[r.counter].push(e)
返回r;
},{})。值

console.log(结果)
您可以检查
重量
,如果不同,则选择一个新组

var data=[{score:5,question:0,weight:2},{score:4,question:1,weight:2},{score:3,question:0,weight:4},{score:4,question:1,weight:4},{score:2,question:2,weight:4},{score:8,question:0,weight:2}],
分组=数据.reduce(函数(r,o,i,a){
if((a[i-1]|{}).weight!==o.weight){
r、 推送([]);
}
r[r.length-1]。推(o);
返回r;
}, []);
控制台日志(分组)

.as console wrapper{max height:100%!important;top:0;}
您可以使用
Array.reduce()
将第一个数组转换为第二个数组。每当当前对象权重与上次权重不匹配时,请添加另一个子阵列。始终将当前项推送到最后一个子阵列:

const arr=[
{分数:5,问题:0,权重:2},
{分数:4,问题:1,权重:2},
{分数:3,问题:0,权重:4},
{分数:4,问题:1,权重:4},
{分数:2,问题:2,权重:4},
{分数:8,问题:0,权重:2}
];
设lastWeight=null;
常数结果=arr.reduce((r,o)=>{
如果(lastWeight==null | | o.weight!==lastWeight){
最后重量=o.重量;
r、 推送([]);
}
r[r.length-1]。推(o);
返回r;
}, []);
控制台日志(结果)
var oldA=[
{“分数”:5,“问题”:0,“权重”:2},
{“分数”:4,“问题”:1,“权重”:2},
{“分数”:3,“问题”:0,“权重”:4},
{“分数”:4,“问题”:1,“权重”:4},
{“分数”:2,“问题”:2,“权重”:4},
{“分数”:8,“问题”:0,“权重”:2}
];
var newA=[];
var-prevW=0;
var prevA;
对于(变量i=0;i
您可以使用
数组#reduce
对数组进行分组。检查
question
的值是否为
0
,然后推送一个新数组并将对象添加到其中

var数据=[{“分数”:5,“问题”:0,“权重”:2},{“分数”:4,“问题”:1,“权重”:2},{“分数”:3,“问题”:0,“权重”:4},{“分数”:4,“问题”:1,“权重”:4},{“分数”:2,“问题”:2,“权重”:4},{“分数”:8,“问题”:0,“权重”:2},
结果=数据。减少((r,o)=>{
如果(o.问题==0)
r、 推送([]);
r[r.length-1]。推(o);
返回r;
},[]);
控制台日志(结果)
让分数=[
{“分数”:5,“问题”:0,“权重”:2},
{“分数”:4,“问题”:1,“权重”:2},
{“分数”:3,“问题”:0,“权重”:4},
{“分数”:4,“问题”:1,“权重”:4},
{“分数”:2,“问题”:2,“权重”:4},
{“分数”:8,“问题”:0,“权重”:2}
]
让groupedScores=[],group=[];
分数。forEach((条目)=>{
如果(entry.question==0){
if(group.length){
分组得分。推(组);
}
组=[];
}
推(入)组;
})
groupedScores.push(组)

console.log(groupedScores)
如果只按
拆分问题:0

data=[{分数:5,问题:0,权重:2},{分数:4,问题:1,权重:2},
{分数:3,问题:0,权重:4},{分数:4,问题:1,权重:4},
{分数:2,问题:2,权重:4},{分数:8,问题:0,权重:2}]
结果=数据。减少((r,v)=>(v.question?r[r.length-1]。推送(v):r.push([v]),r),[])

console.log(result)
@Slai,否,因为它应该将相同的权重分组,而不是收集一些计数。它不按权重分组,因为它们可能都是第2组。它需要循环处理这些问题,如果它重置回0,则在较大的数组中启动一个新数组。主要标识符是问题id。请添加您的尝试。@TonyHensler它应该分组相同的权重,那么为什么组1和组3不同,因为两个组的权重都是2。@yajiv它是按以
开头的序列分割的“问题”:0