Как динамически создать массив для обновления карты дерева ZingChart

Я пытаюсь динамически создать этот массив данных для ZingCharts, и я в тупике.

В принципе, мне нужно сделать эту структуру:

var series = [{
  text: "Democratic", 
  style: {
      backgroundColor: "blue"
    },

  children: [{ 
    text: "California",
    value: 55,
    style: {
      backgroundColor: "blue"
    },

  }, {
    text: "Oregon",
    value: 7,
    style: {
      backgroundColor: "blue"
    },
  }]
}, 
{
  text: "Republican", 
  style: {
      backgroundColor: "red"
    },
  children: [{ 
    text: "Texas",
    value: 38,
    style: {
      backgroundColor: "red"
    },
  }, {
    text: "Georgia",
    value: 16,
    style: {
      backgroundColor: "red"
    },
  }]
}, {
  text: "TossUp", 
  style: {
      backgroundColor: "grey"
    },
  children: [{ 
    text: "Arizona",
    value: 22,
    style: {
      backgroundColor: "grey"
    },
  }]
}, ]
}]
};

Я не знаю, как правильно это сделать. Я испытываю желание сделать что-то вроде этого:

result.push("text: '" + data[0].party + "'")

Мне нужно сделать это со всеми 50 государствами, и данные поступают в структуре, как это:

var data = [{
  "color": "blue",
  "party": "Democratic",
  "text": "California",
  "value": 55,
}, {
  "color": "blue",
  "party": "Democratic",
  "text": "Oregon",
  "value": 7,
}, {
  "color": "red",
  "party": "Republican",
  "text": "Texas",
  "value": 38,
}, {
  "color": "red",
  "party": "Republican",
  "text": "Georgia",
  "value": 16,
}, {
  "color": "grey",
  "party": "Democratic",
  "text": "Arizona",
  "value": 11,
}];

Любые советы о том, что я должен искать, будет принята с благодарностью. Спасибо!

1 ответ

Решение

Использование reduce функция и hash table создать желаемую структуру данных:

var data=[{color:"blue",party:"Democratic",text:"California",value:55},{color:"blue",party:"Democratic",text:"Oregon",value:7},{color:"red",party:"Republican",text:"Texas",value:38},{color:"red",party:"Republican",text:"Georgia",value:16},{color:"grey",party:"Democratic",text:"Arizona",value:11}];

var result = data.reduce(function(hash) {
  return function(prev, curr) {
    if (hash[curr.color]) {
      hash[curr.color].children.push({
        text: curr.text,
        value: curr.value,
        style: {
          backgroundColor: curr.color
        }
      });
    } else {
      hash[curr.color] = {};
      hash[curr.color].children = hash[curr.color].children || [];
      prev.push({
        text: curr.party,
        style: {
          backgroundColor: curr.color
        },
        children: hash[curr.color].children
      });
      hash[curr.color].children.push({
        text: curr.text,
        value: curr.value,
        style: {
          backgroundColor: curr.color
        }
      });
    }
    return prev;
  };
}(Object.create(null)), []);

console.log(result);
.as-console-wrapper{top: 0;max-height: 100%!important;}

Дайте мне знать ваши мысли по этому поводу, спасибо!

Другие вопросы по тегам