Javascript Слияние ключей и значений - PullRequest
0 голосов
/ 31 января 2020
{Test1: 11, Test2: 25, Test3: 4, others: 5, others: 9, others: 11, others: 13, others: 27}

Я получаю этот объект взамен, и я должен показать его как:

{Test1: 11, Test2: 25, Test3: 4, others: 65}

Где 65 - сумма всех значений с ключом others.

Ниже приведен код.

openTypeCaseChart.data.labels = $.map(countJson['types'], function(obj, index) {
    var retObj;
    if (index <= 2){
        retObj = obj['type_label'] + " " + obj['open'];
        return retObj;
    } else {
        total += obj['open']
        retObj = obj['type_label'] = "others"+ " " + total;
    }
    console.log("retObj: "+retObj);

}

Ответы [ 2 ]

1 голос
/ 31 января 2020

Я полагаю, у вас есть входные данные в этом формате:

const countJson = {
  types: [
    {
      type_label: 'Test1',
      open: 11,
    },
    {
      type_label: 'Test2',
      open: 25,
    },
    {
      type_label: 'Test3',
      open: 4,
    },
    {
      type_label: 'Test4',
      open: 5,
    },
    {
      type_label: 'Test5',
      open: 9,
    },
    {
      type_label: 'Test6',
      open: 11,
    },
    {
      type_label: 'Test7',
      open: 13,
    },
    {
      type_label: 'Test8',
      open: 27,
    },
  ],
  // ...
};

Затем вы можете использовать эту функцию, которая принимает ваш объект count Json в качестве ввода и возвращает строку с ключами, меньшими, чем индекс 2, с их исходные ключи (Test1, Test2, Test3) и все элементы выше тех, чьи значения суммируются и объединяются в один ключ 'others':

const mergeCounts = countJson => {
  const itemsObj = countJson.types
    .reduce((obj, item, i) => {
      const k = item.type_label;
      const v = item.open;

      // for all items after index 2, sum and merge them into a single key 'others'
      if (i > 2) {
        const othersValue = v + (obj['others'] || 0);

        return {
          ...obj,
          'others': othersValue,
        };
      }

      // for items up to index 2, return key value pairs
      return {
        ...obj,
        [item.type_label]: item.open
      };
    }, {})

  // At this point, you get:
  // itemsObj = { Test1: 11, Test2: 25, Test3: 4, others: 65 }

  return Object.keys(itemsObj)
    .map((k, i) => `${k} ${itemsObj[k]}`)
    .join(','); // this results: Test1 11,Test2 25,Test3 4,others 65
};

console.log(
  mergeCounts(countJson) // results: Test1 11,Test2 25,Test3 4,others 65
);
0 голосов
/ 31 января 2020

Вы можете использовать для в л oop для вашего требования. Пример

for(let key in object)
{
  console.log(key +" "+object[key])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...