TypeScript 类型混淆(TypeError:无法读取未定义的属性“切片”)

2024-01-08

我有以下数据csv我的 Angular 项目中的文件也导入了D3.js图书馆:

group,Nitrogen,normal,stress
banana,12,1,13
poacee,6,6,33
sorgho,11,28,12
triticum,19,6,1

我还在打字稿文件中添加了以下代码来显示堆叠栏:

import { Component, OnInit } from '@angular/core';
import * as d3 from 'd3';

@Component({
  selector: 'app-stacked-bar',
  templateUrl: './stacked-bar.component.html',
  styleUrls: ['./stacked-bar.component.css']
})
export class StackedBarComponent implements OnInit {

  data = [
    {"group": "banana", "Nitrogen": "12", "normal": "1", "stress": "13"},
    {"group": "poacee", "Nitrogen": "6", "normal": "6", "stress": "33"},
    {"group": "sorgho", "Nitrogen": "11", "normal": "28", "stress": "12"},
    {"group": "triticum", "Nitrogen": "19", "normal": "6", "stress": "1"}
  ];

  svg: any;

  margin = 50;
  width = 750 - (this.margin * 2);
  height = 400 - (this.margin * 2);

  ngOnInit(): void {

    this.createSvg();
    this.drawBars(this.data);
  }

  createSvg(): void {

    this.svg = d3.select("figure#stacked-bar")
    .append("svg")
    .attr("width", this.width + (this.margin * 2))
    .attr("height", this.height + (this.margin * 2))
    .append("g")
    .attr("transform", "translate(" + this.margin + "," + this.margin + ")");
  }

  drawBars(data): void {
 
    // List of subgroups - Header of the csv file.
    // ["Nitrogen", "normal", "stress"]
    const subgroups = data.columns.slice(1);
            
    // List of groups - Value of the first column, called group.
    const groups = data.map(d => (d.group));

    // Create the X-axis band scale.
    const x = d3.scaleBand()
    .domain(groups)
    .range([0, this.width])
    //.domain(data.map(d => d.groups))
    .padding(0.2);

    // Draw the X-axis on the DOM.
    this.svg.append("g")
    .attr("transform", "translate(0," + this.height + ")")
    .call(d3.axisBottom(x).tickSizeOuter(0));
    
    // Create the Y-axis band scale.
    const y = d3.scaleLinear()
    .domain([0, 60])
    .range([this.height, 0]);

    // Draw the Y-axis on the DOM.
    this.svg.append("g")
    .call(d3.axisLeft(y));

    // color palette = one color per subgroup
    const color = d3.scaleOrdinal()
    .domain(subgroups)
    .range(['#e41a1c','#377eb8','#4daf4a']);

    // Stack the data per subgroup.
    const stackedData = d3.stack()
    .keys(subgroups)
    (data);

    // Create and fill the bars.
    this.svg.append("g")
    .selectAll("g")
    .data(stackedData)
    .join("g")
    .attr("fill", d => color(d.key))
    .selectAll("rect")    
    .data(d => d)
    .join("rect")
    .attr("x", d => x(d.data.group))
    .attr("y", d => y(d[1]))
    .attr("height", d => y(d[0]) - y(d[1]))
    .attr("width", x.bandwidth());
  }
}

但我只得到一块空地。当我检查页面时,出现以下控制台错误:

类型错误:无法读取未定义的属性“切片”

由于某些类型的歧义data, the slice方法无法应用,但是当我只是复制和粘贴时["Nitrogen", "normal", "stress"]代替subgroups在代码中,一切正常!

有人可以帮我解决这个问题吗?

附注图表应如下所示:


假设你正在这样做example https://www.d3-graph-gallery.com/graph/barplot_stacked_basicWide.html,然后注意这使用d3.csv将 csv 输入转换为对象数组。 D3 创建这个数组plus一个习俗columns示例中使用的属性。

const csv = `group,Nitrogen,normal,stress
banana,12,1,13
poacee,6,6,33
sorgho,11,28,12
triticum,19,6,1`;

const data = d3.csvParse(csv);
console.log(data.columns);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>

在您的代码中,您有相同的对象数组,但您没有显示 csv 导入方法,因此我们可能假设您没有使用d3.csv并使用其他方法来获取数据。

在这种情况下,相当于data.columns is Object.keys(data[0])。从那里你可以使用slice获取要为堆栈分组的列:

const data = [
  {"group": "banana", "Nitrogen": "12", "normal": "1", "stress": "13"},
  {"group": "poacee", "Nitrogen": "6", "normal": "6", "stress": "33"},
  {"group": "sorgho", "Nitrogen": "11", "normal": "28", "stress": "12"},
  {"group": "triticum", "Nitrogen": "19", "normal": "6", "stress": "1"}
];

const dataColumns = Object.keys(data[0]);
console.log(dataColumns);

const subgroups = dataColumns.slice(1)
console.log(subgroups);
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript 类型混淆(TypeError:无法读取未定义的属性“切片”) 的相关文章

  • 从 DOM 中删除后,动态添加的 JavaScript 脚本会继续执行

    因此 我正在创建一个 SPA 并使用 AJAX 将 HTML 页面加载到我网站的索引页面中 问题是 当包含我的一个页面时 它似乎会徘 徊并执行其中的 JavaScript 代码 即使它随后从 DOM 中删除 索引 html 正文 div d
  • 如何在全局配置文件中配置 ngx-logger 的记录器级别

    我最近包括了ngx logger对于我在应用程序中实现记录器级别的项目 我已将记录器级别硬编码为app module ts在配置内ngx logger但我需要在一些全局配置文件中实现这一点 我遵循了教程here https medium c
  • 如何在 Chrome 中实现抓取光标图标?

    我知道可以在 Chrome 中使用抓取光标图标 当然是在 Gmail 中 但我不知道如何在我的代码中实现它 我已经尝试过 在CSS中 body cursor grab body cursor webkit grab body cursor
  • 如何从 URL 字符串中删除某些参数?

    我有这个var存储表示充满参数的 URL 的字符串 我正在使用 AngularJS 我不确定是否有任何有用的模块 或者可能使用纯 JavaScript 来删除不需要的 URL 参数而无需使用正则表达式 例如我需要删除 month 05并且
  • 一个 Next.js 路由中的两个不同子域

    我想使用构建一个新平台Next js https nextjs org React js https reactjs org and 反应路由器 https reacttraining com react router web guides
  • 区分单击与 mousedown/mouseup

    我已经阅读了有关这种情况的 stackoverflow 上的几个答案 但没有一个解决方案有效 我尝试根据用户是否单击某个元素或使用 jQuery 将鼠标按住该元素来执行不同的操作 有可能做到这一点吗 onMouseDown 将在按下左侧或右
  • JSDoc:如何在生成的文档中包含自定义 css 文件模板?

    JS文档docs https jsdoc app about configuring default template html say 将图像目录复制到输出目录 复制全部 将 myproject static 中的静态文件复制到输出目录
  • WebDriver:更改事件未触发

    我有一个使用 KnockoutJS 的应用程序 我正在尝试编写一些测试表单的测试 如果您不了解 KnockoutJS 简单来说 它提供了从我的视图到我的数据模型的绑定 这意味着当我在输入字段中键入值时 我的基础对象会自动使用该输入字段值进行
  • 带有嵌入式 Ruby 的 Javascript:如何安全地将 ruby​​ 值分配给 javascript 变量

    我在页面的 javascript 块中有这一行 res foo 处理这种情况的最佳方法是什么 ruby var里面有单引号吗 否则会破坏 JavaScript 代码 我想我会用红宝石JSON http json org ruby var 上
  • NodeJS 无法加载 css 文件

    所以我正在尝试制作一个 NodeJS 服务器 并且我尝试保留尽可能少的附加组件 但是 我遇到了一个问题 我似乎无法加载任何内容CSS我调用的文件HTML文件 该调用似乎确实由服务器处理 但它不会显示在浏览器中 My 网络服务器 js fil
  • Relay 中的嵌套片段数据始终相同

    我是 Relay 新手 并且遇到了片段上嵌套数据的问题 当我在 graphiql 中进行测试时 以下查询返回正确的数据 因此我确信我的架构是正确的 viewer customers name billing address city 但是
  • 用于导出到 CSV/Excel 的数据 URI(无服务器端请求):浏览器支持/限制?

    以下问题 Javascript 或 Flash 导出至 CSV Excel https stackoverflow com questions 8150516 javascript or flash export to csv excel
  • Rails 4 - 带有 dependent-fields-rails 的条件 JS

    我正在尝试弄清楚如何在我的 Rails 4 应用程序中使用 dependent fields rails gem 我迷路了 我已将 underscore js 包含在我的供应商 javascripts 文件夹中 并更新了我的 applica
  • Web 应用程序中的 PathLocationStrategy 与 HashLocationStrategy

    使用的优点和缺点是什么 PathLocationStrategy 默认的 HTML 5 PushState 样式 HashLocationStrategy 哈希 URL 样式 例如 使用哈希位置策略将阻止通过 ID 滚动到元素的功能 但某些
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • 在外部单击时关闭弹出 div

    我有一个弹出 div 仅在单击特定按钮时显示 单击同一按钮时它甚至会隐藏 我的问题是 我还想在单击外部任何地方时隐藏 div 我无法这样做 因为弹出 div 位于主包装类内部 并且无法通过在包装类上使用 click 事件并使其隐藏来做到这一
  • Jade(当前称为“Pug”)模板引擎中的循环

    我想使用一个简单的循环 例如for int i 0 i lt 10 i 如何在 Jade 引擎中使用它 我正在使用 Node js 并使用expressjs 框架 例如 for var i 0 i lt 10 i li array i 你可
  • 获取 2 个日期之间的月份名称

    我有两个约会from and to 我想获取这两个日期之间的所有月份名称 以下是我的代码 var monthNames January February March April May June July August September
  • 响应式菜单:悬停子菜单显示错误

    简而言之 我根据教程创建了一个响应式菜单 当您将鼠标悬停在投资组合按钮上时 菜单应该显示子菜单 而在移动模式下 您需要按该按钮才能显示子菜单 效果很好 问题是该教程有一个错误 如果您在桌面模式下按组合按钮 子菜单将不会再次显示 除非您按 单
  • 我可以防止将 Leaflet 地图平移到世界边缘之外吗?

    有没有办法限制平移到世界边缘之外 在这幅画中 棕色是世界 灰色是虚空 我想让它不可能像这样平移 Leaflet 允许您控制地图抵抗被拖出边界的程度maxBoundsViscosity选项 值 0 到 1 将其设置为最大值会完全禁用拖动出界

随机推荐

  • EF 4.3 迁移 - 如何生成降级脚本?

    我有一个问题 在网络上找不到答案 我正在使用带有 SQL 的 Code First EF 4 3 1 迁移 我添加了几个迁移 现在我想生成一个用于在两个迁移之间升级 降级的脚本 对于升级 我运行以下命令 成功重现升级脚本 PM gt Upd
  • 我什么时候在哪里以及如何更改对象的 __class__ 属性?

    我希望能够做到 gt gt gt class a str pass gt gt gt b a gt gt gt b class str Traceback most recent call last File
  • 单击时添加 div,然后在每次单击时切换它

    我尝试点击添加 添加的内容将第一次出现 添加后 我想单击 添加 它只会切换 已添加 而不是每次单击时添加 已添加 Jquery function var NewContent div class added Added div add cl
  • 在 Velocity 模板中调用宏函数

    我试图弄清楚如何从速度宏调用返回一个值并将其分配给一个变量 我的宏函数看起来像这样 它曾经是常见的共享宏文件 macro getBookListLink readingTrackerResult readingTrackerResult g
  • Spring Boot + Batch:注入/自动装配的 bean 在 ItemReader 中为 null

    当我尝试自动装配 ItemReader 中的任何 bean 时 我收到 NPE 有人可以帮我解决我哪里出错了吗 谢谢 要求是我想在 ItemReader 中注入 DAO 以从多个源获取数据并创建单个对象 这是我的配置类 Configurat
  • PHP 保护目录不被直接 URL 访问

    我有一个管理员脚本 admin index php 所有的活动都是通过这个完成的index php file 用户在获得程序功能的访问权限之前先登录 SESSION user authenticated 创建并设置为true admin t
  • 扩展 Magic Mouse 的功能:我需要 kext 吗?

    我最近购买了一个妙控鼠标 它非常棒并且充满潜力 不幸的是 它受到软件支持的严重阻碍 我想解决这个问题 我做了很多研究 这些是迄今为止我对事件链的发现 Magic Mouse 向系统发送完整的多点触控事件 多点触控事件在 Multitouch
  • 使用 ExpandableListView/SimpleCursorTreeAdapter 在 UI 线程上运行 SQLite 查询

    我正在开发一个用于显示大量 RSS 源的 Android 应用程序 是的 我知道已经有很多这样的应用程序 要显示的数据由内容提供商支持 我希望向后兼容 API 级别 4 我正在使用一个ExpandableListView显示三个不同 RSS
  • 检查日期约束

    我需要对日期进行检查约束 以便在今天 该日期之后无法输入数据 请指教谢谢大家 尝试这个 ALTER TABLE yourTable ADD CONSTRAINT yourDateTimeColumn CHECK yourDateTimeCo
  • 阻止 mp3 文件在浏览器中流式传输

    我在 apache 服务器上有一个 mp3 我希望当用户访问链接时将其作为文件下载 相反 quicktime 或 google chrome 媒体播放器将尝试传输它 有没有解决这个问题的标题 或者是唯一的选项 右键另存为 Edit这是我的标
  • 在 VS2017 中将依赖程序集包含到 NuGet 包中

    我有一个包含 2 个项目 NET Core 的解决方案 第一个项目 库 包含主程序集 另一个项目 库 包含包含资源 接口和其他内容的程序集 主项目引用了第二个项目 我使用的是 Visual Studio 2017 当我从主项目创建 NuGe
  • 无法让 mysqldump 连接到本地 mysql 实例(错误 2003 / 10061)

    我在 Windows XP 机器上安装了 mysql 5 1 它正在侦听端口 3308 我正在尝试使用 mysqldump gt mysqldump u root pmypassword dbname gt out sql 出现错误 mys
  • 如何使用 Gradle 在 IntelliJ 中设置 SLF4J

    我很难在 IntelliJ 中使用 Gradle 配置 SLF4J 无论我做什么 我都会收到以下消息 SLF4J 无法加载类 org slf4j impl StaticLoggerBinder SLF4J 默认为无操作 NOP 记录器实现
  • 有没有可以重新格式化 C# 代码的工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 最好是 命令行工具 可以在目录树上重新格式化 C 源代码 理想情况下 我应该能够自定义格
  • 如何按日期范围查询Cassandra

    我有一个 Cassandra ColumnFamily 0 6 4 它将包含来自用户的新条目 我想向 Cassandra 查询这些新条目 以便我可以在另一个系统中处理该数据 我的感觉是 我可以使用 TimeUUIDType 作为条目的键 然
  • 世博相机变焦

    这是我第一次在 React Native 中使用捏合手势处理程序 我正在尝试使用 Expo 创建一个可缩放相机 我正在做的是 const handlePinch nativeEvent gt const scale velocity nat
  • 调试帮助 - 交换双向链表的 2 个节点

    您能帮我调试这段代码以交换双链表的两个节点吗 我无法弄清楚我做错了什么 这是代码 dll swap node dll head dll node1 dll node2 dll tmp int flag 0 if node1 gt prev
  • 从每组中选择前 1 行

    我有一个表格列出了已安装的软件版本 id userid version datetime 111 75 10075 2013 03 12 13 40 58 770 112 75 10079 2013 03 12 13 41 01 583 1
  • 没有Mac就无法使用Xamarin吗?

    我在 Windows 10 上使用 Visual Studio 2017 根本没有使用 Mac 当我尝试调试新的 Xamarin 跨平台项目时 VS 尝试找到 Mac 通过 Xamarin 创建跨平台应用程序几乎需要 Mac 吗 是的 您需
  • TypeScript 类型混淆(TypeError:无法读取未定义的属性“切片”)

    我有以下数据csv我的 Angular 项目中的文件也导入了D3 js图书馆 group Nitrogen normal stress banana 12 1 13 poacee 6 6 33 sorgho 11 28 12 triticu