程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用 javascript map() 方法展平 d3.nest?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使用 javascript map() 方法展平 d3.nest??

开发过程中遇到如何使用 javascript map() 方法展平 d3.nest?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用 javascript map() 方法展平 d3.nest?的解决方法建议,希望对你解决如何使用 javascript map() 方法展平 d3.nest?有所启发或帮助;

我有一些用 d3 嵌套的数据。我现在想把它弄平。我正在尝试使用 @H_352_3@map() 方法来执行此操作,但出现错误。

这是我在控制台日志中看到的错误——与第 24 行(我尝试获取 item.values[i].key 的地方)有关:

未捕获(承诺)类型错误:无法读取的属性“key” 未定义

我不知道我哪里出错了,我花了好几个小时在谷歌上搜索。 This question 类似,但没有回答。看起来这应该很简单。

我错过了什么?谢谢!

这是我的代码:

<!DOCTYPE HTML>
<Meta charset="utf-8">

<script src="https://cdn.Jsdelivr.net/npm/axios/dist/axios.min.Js"></script>
<script src="https://d3Js.org/d3.v4.min.Js"></script>
<script>

const mhData = axios.get("https://docs.Google.com/spreadsheets/d/e/2PACX-1vR-MzpkhMmVMkwmhKFvjPyru5LlYPvWo7_xU8ZARbQmDWP9AIh1VXhZ1aWLWR_PgAySq4gobndfpWP0/pub?gID=0&single=true&output=csv")
    .then(content => {

        const justData = content.data
        const csv = d3.csvParse(justData)

        const nestedData = d3.nest()
            .key(d => d.datE)
            .key(d => d.industry)
            .rollup(v => d3.sum(v,d => d.value))
            .entrIEs(csv)
            console.log('nestedData',nestedData)


        const flattenData = nestedData.map((item,i) => ({
            date: item.key,industry: item.values[i].key,value: item.values[i].value
        }));
        console.log('flattenData',flattenData)
})
</script>
</body>
</HTML>

解决方法

在您的代码中:nestedData.map((item,i) => ({...inestedData 的索引,而不是 values - 这就是您遇到错误的原因。

您的 nest 返回单层嵌套,例如

nestedData [
  {
    "key": "2020-01-07","values": [
      {
        "key": "Tech","value": 1352
      },{
        "key": "Media","value": 2848
      },...

因此在您的 @H_352_3@map 中,您需要一个嵌套的 @H_352_3@map。您还可以将“外部”@H_352_3@map 更改为 flatMap,然后将返回一组对象。

我从您的数据中抽取了一小部分样本来配合下面的工作示例:

const csv = mockData();
//console.log(csv);

const nestedData = d3.nest()
  .key(d => d.datE)
  .key(d => d.industry)
  .rollup(v => d3.sum(v,d => d.value))
  .entries(csv)
//console.log('nestedData',nestedData);

const flattenData = nestedData.flatMap((item,i) => {
  const date = item.key;
  return item.values.map(industry => ({
    date: date,industry: industry.key,value: industry.value
  }));
});
console.log('flattenData',flattenData);

function mockData() {
  const str = `date,industry,gender,value
2020-01-07,Tech,Men,1004
2020-01-07,Women,348
2020-01-07,Media,2468
2020-01-07,380
2020-01-07,Real Estate,1214
2020-01-07,391
2020-01-14,989
2020-01-14,357
2020-01-14,2430
2020-01-14,393
2020-01-14,1322
2020-01-14,366
2020-01-21,975
2020-01-21,339
2020-01-21,2416
2020-01-21,388
2020-01-21,1336
2020-01-21,3581`;

  return d3.csvParse(str);
}
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudFlare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>

这不是展平 d3.nest 输出的通用方法 - 您需要n 级嵌套,并且可能需要递归方法。但这应该适用于您的示例。

有一些相关的帖子 here 和 here。

大佬总结

以上是大佬教程为你收集整理的如何使用 javascript map() 方法展平 d3.nest?全部内容,希望文章能够帮你解决如何使用 javascript map() 方法展平 d3.nest?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。