Добавление двух или более массивов с одинаковыми значениями вместе в один массив - PullRequest
0 голосов
/ 13 июня 2019

У меня есть массив, который содержит 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
*/

Ответы [ 3 ]

0 голосов
/ 13 июня 2019

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);
0 голосов
/ 14 июня 2019

Хорошо, учитывая ваши комментарии, я думаю, вы ищете что-то вроде этого:

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);

Поскольку это немного отличается от того, что вы описали в своем вопросе, я предпочитаю создать новый ответ, чем редактировать первый.

0 голосов
/ 13 июня 2019

Вы можете перебирать массив и строить новые элементы по тому же индексу, что и заданные внутренние массивы.

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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...