簡體   English   中英

將具有鍵值對的對象子數組轉換為數組數組

[英]Convert sub-array of objects with key-value pairs into array of arrays

我無法將某些CSV數據轉換為NVD3堆疊面積圖可接受的格式(此處顯示的示例數據: http ://nvd3.org/examples/stackedAreaData.json)。 我目前有一個對象數組,其值是鍵值對對象,但是需要將其轉換為對象數組,其值是數組的數組。

現在的樣子:

[{"key":"path1","values":[{"key":1,"value": x},{"key":2,"value": y},{"key":3,"value": z}]},{"key":"path2","values":[{"key":1,"value": a},{"key":1,"value": b},{"key":1,"value": c}]}]

外觀如何:

[{"key":"path1","values":[[1,x],[2,y],[3,z]]},{"key":"path2","values":[[1,a],[2,b],[3,c]]}]

換句話說,我需要將與“路徑”(path1,path2等)相對應的每個對象中的“值”從對象數組更改為數組數組(它們只是對象屬性的值)鍵”和“值”。

我當前的代碼如下所示:

d3.csv("http://monicawojciechowski.github.io/pathtoplayoff/full_data.csv", function(d) {
  return {
    path: +d.path,
    week: +d.week,
    playoff: +d.playoff,
    tm: d.tm,
    conf: d.conf,
    div: d.div,
    conf_div: d.conf_div
  };
  },

  function(data) {
  var rawdata = data;
  console.log(rawdata);

 var databypath_rollup = d3.nest()
 .key(function(d) {return +d.path; }).sortKeys((a, b) => d3.ascending(+a, +b))
 .key(function(d) {return +d.week; }).sortKeys((a, b) => d3.ascending(+a, +b))
 .rollup(function(leaves) {return d3.sum(leaves, function(d) {return parseFloat(d.playoff);})})
 .entries(rawdata);
console.log(databypath_rollup);

當我嘗試通過以下操作將對象數組更改為數組數組時:

var arrayformat = databypath_rollup.map(function(obj) {
  return Object.keys(obj).sort().map(function(key) { 
    return obj[key];
  });
});
console.log(arrayformat);

我錯誤地將對象的外部數組更改為數組數組。 我想保留較高級別的鍵值對,同時將子級別更改為[1,y](與{“ key”:1,“ value”:y}相比)

有什么想法嗎?

看起來像是Array.prototype.reduce()的完美用法

看起來您正在使用ES5,所以這就是ES5的樣子

let res1 = items.reduce(function(acc, item){
  return acc.concat({
    "key": item.key,
    "values": item.values.map(function(value) { return [value.key, value.value] })
  })
}, []);

這就是ES6的樣子

let res2 = items.reduce((acc, item) => {
  return acc.concat({
    "key": item.key,
    "values": item.values.map((value) => [value.key, value.value])
  })
}, []);

上面兩個都使用此數組(它修復了示例中的語法錯誤)...

let items = [{ "key": "path1", "values": [{ "key": 1, "value": "x" }, { "key": 2, "value": "y" }, { "key": 3, "value": "z" }] }, { "key": "path2", "values": [{ "key": 1, "value": "a" }, { "key": 1, "value": "b" }, { "key": 1, "value": "c" }] }];

我在這里在repl.it上設置了一個repl ... https://repl.it/MsQu

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM