我有一个数组,其中包含100个数组,每个对象的3160个值都有两个值,一个是序列号(我认为该数字仅在存在1的情况下出现),另一个是0或1。
我想将所有100个数组组合为一个数组,其中一个对象的3160个值具有两个值,所有100个数组中包含的所有序列号的列表,以及所有0和1的总和。
我尝试了串联,但我不想输入3160个以上
/*results of what I have
Array(100)
[0]Array(3160)
[0]: Seq: 12345
fq: 1
[1]: Seq: 12345
fq: 0
[2]: Seq: 12345
fq: 1
[3]: Seq: 12345
fq: 0
and so on...
[1]Array(3160)
[0]: Seq: 12346
fq: 1
[1]: Seq: 12346
fq: 1
[2]: Seq: 12346
fq: 0
[3]: Seq: 12346
fq: 0
and so on...
[2]Array(3160)
[0]: Seq: 12347
fq: 1
[1]: Seq: 12347
fq: 0
[2]: Seq: 12347
fq: 1
[3]: Seq: 12347
fq: 0
and so on...
and so on...
What I Want:
Array(3160)
[0]: Seq: 12345, 12346, 12347
fq: 3
[1]: Seq: 12346
fq: 1
[2]: Seq: 12345, 12347
fq: 2
[3]: Seq:
fq: 0
*/
答案 0 :(得分:0)
您可以迭代数组并在与给定内部数组相同的索引上构建新项目。
var data = [[{ Seq: 12345, fq: 1 }, { Seq: 12345, fq: 0 }, { Seq: 12345, fq: 1 }, { Seq: 12345, fq: 0 }], [{ Seq: 12346, fq: 1 }, { Seq: 12346, fq: 1 }, { Seq: 12346, fq: 0 }, { Seq: 12346, fq: 0 }], [{ Seq: 12347, fq: 1 }, { Seq: 12347, fq: 0 }, { Seq: 12347, fq: 1 }, { Seq: 12347, fq: 0 }]],
result = data.reduce((r, a) => {
a.forEach(({ Seq, fq }, i) => {
if (!fq) return;
r[i] = r[i] || { Seq: [], fq: 0 };
r[i].Seq.push(Seq);
r[i].fq++;
});
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
let array = [[{Seq: 12345, fq: 1}, {Seq: 12345, fq: 0}],
[{Seq: 12346, fq: 1}, {Seq: 12346, fq: 1}],
[{Seq: 12347, fq: 1}, {Seq: 12347, fq: 0}]];
let output = new Array();
array.forEach(entrie => entrie.forEach((obj, index) => {
if(obj.fq) {
output[index] = output[index] || {Seq: [], fq: 0};
output[index].Seq.push(obj.Seq);
output[index].fq += obj.fq;
}
}));
console.log(output);
答案 2 :(得分:0)
确定您的评论,我想您正在寻找这样的东西:
let array = [[{Seq: 12345, fq: 1}, {Seq: 12345, fq: 0}],
[{Seq: 12346, fq: 1}, {Seq: 12346, fq: 1}],
[{Seq: 12346, fq: 1}, {Seq: 12346, fq: 1}],
[{Seq: 12347, fq: 1}, {Seq: 12347, fq: 0}]];
let output = new Array();
array.forEach(entrie => entrie.forEach((obj, index) => {
if(obj.fq) {
output[index] = output[index] || {Seq: [], fq: 0};
if(!output[index].Seq.includes(obj.Seq)) output[index].Seq.push(obj.Seq);
output[index].fq += obj.fq;
}
}));
console.log(output);
由于它与您对问题的描述有所不同,因此我更喜欢创建一个新答案,而不是编辑第一个答案。