Динамический массив jQuery с соответствующим значением - PullRequest
0 голосов
/ 19 октября 2019

В моем объекте jQuery есть следующие данные:

Группа - Ранг - Значение

A - 1 - 200
B - 2 - 200
C- 3 - 200
D - 3 - 500
E - 3 - 600
F - 3 - 400
G - 4 - 100
H - 4 - 300

Я пытаюсь создать цикл в jQuery, который может предоставить мне вывод в массиве ниже:

var groupsArray = [];

{
"Rank" : 1
"Total": 200
"TotalRows": 1
},
{
"Rank" : 2
"Total": 200
"TotalRows": 1
},
{
"Rank" : 3
"Total": 1700
"TotalRows": 4
},
{
"Rank" : 4
"Total": 400
"TotalRows": 2
}

Я пытаюсь это с прошлого разадва дня, но не смог найти никакого способа добиться этого. Я пытался использовать цикл for, но заканчивал несколькими циклами for (один внутри другого), что влияет на производительность:

for(var i=0; i<ds.data.length(); i++)
{
   for(var j=0; j<ds.data.length(); j++)
   {
      if(ds.data(j).GridCell.Rank == i)
      {
           //Create or edit array
      }
   }
   //Add the values to groupsArray
}

Я также пытался использовать функцию «каждая», но не смог найти правильный способ реализациилогика выше.

Просьба ко всем экспертам помочь в достижении вышеизложенного в jQuery с минимальным числом циклов и повышенной производительностью.

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

вы можете использовать простой цикл для этого. Надеюсь, это поможет вам!

 var data = [{ group: 'A', rank: 1, value: 200 }, { group: 'B', rank: 2, value: 200 }, { group: 'C', rank: 3, value: 200 }, { group: 'D', rank: 3, value: 500 }, { group: 'E', rank: 3, value: 600 }, { group: 'F', rank: 3, value: 400 }, { group: 'G', rank: 4, value: 100 }, { group: 'H', rank: 4, value: 300 }];
    var result = {};
    for(let i = 0; i < data.length; i++) {
        let row = data[i];
        if(!result.hasOwnProperty(row.rank)) {
            result[row.rank] =  { rank: row.rank, total: 0, totalRows: 0 };
        }
         result[row.rank].total += row.value;
         result[row.rank].totalRows++;
    };
    Object.values(result);
0 голосов
/ 19 октября 2019

Вы можете взять объект в качестве хеш-таблицы для rank, добавить части к определенному рангу и получить массив значений из объекта в качестве результата.

var data = [{ group: 'A', rank: 1, value: 200 }, { group: 'B', rank: 2, value: 200 }, { group: 'C', rank: 3, value: 200 }, { group: 'D', rank: 3, value: 500 }, { group: 'E', rank: 3, value: 600 }, { group: 'F', rank: 3, value: 400 }, { group: 'G', rank: 4, value: 100 }, { group: 'H', rank: 4, value: 300 }],
    result = Object.values(data.reduce((r, { rank, value }) => {
        r[rank] = r[rank] || { rank, total: 0, totalRows: 0 };
        r[rank].total += value;
        r[rank].totalRows++;
        return r;
    }, {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...