我有一个 .csv 文件,我通过 p5.js 草图在 JavaScript 中调用它。其中一个字段包含范围从 103 字符到 328 字符的句子。我的脚本调用数据并随机显示在画布上。因为有些句子很长,它们不适合画布,所以我想把它们分成两行或三行的字符串。
我已经阅读了JavaScript 文档中的Template Literals和RegExp,但所有示例都使用写成变量的字符串变量。因此,例如,在我的数据中是这样的:
var myString = `We can lift up people and places who've been left out,
from our inner cities to Appalachia,
in every manufacturing town hollowed out when the factory closed,
every community scarred by substance abuse,
every home where a child goes to bed hungry.`
这Template Literal
将作为多行对象打印到画布上。但我需要做的是让 JavaScript 从我的数据中的 statements 数组创建一个多行对象。
我有 aconstructor
和 aprototype
来格式化句子的颜色、大小、x/y 位置和运动。
// Function to align statements, categories, and polarity
function Statement(category, polarity, statement) {
this.category = category;
this.statement = statement;
this.polarity = polarity;
this.x = random(width/2);
this.y = random(height);
this.dx = random(-speed, speed);
this.dy = random(-speed, speed);
}
// Attach pseudo-class methods to prototype;
// Maps polarity to color and x,y to random placement on canvas
Statement.prototype.display = function() {
this.x += this.dx;
this.y += this.dy;
if(this.x > width+10){
this.x = -10
}
if(this.y > height+10) {
this.y = -10
}
if(this.polarity == -1){
fill(205, 38, 38);
}
else if(this.polarity == 1){
fill(0, 145, 205);
}
else{
fill(148, 0, 211);
}
textSize(14);
text(this.statement, this.x, this.y);
}
所以我想我想知道的是我是否需要创建一个RegExp
,喜欢String.split("[\\r\\n]+")
并添加\r\n
到数据中,如果是这样,我会将它放在我的脚本中的什么位置。我在 中尝试过Statement.display.prototype
,但它似乎破坏了整个脚本,因为语句不会加载。
编辑:我有些不安地添加了这个编辑,因为我因为没有制作一个最小的、完整的、可验证的例子而被钉牢,而“最小”是我被钉牢的部分。也就是说,这是我的代码的顶部。
var clContext;
var speed = 0.8;
var statements = [];
var category = [];
var canvas;
//load the table of Clinton's words and frequencies
function preload() {
clContext = loadTable("cl_context_rev.csv", "header");
}
function setup() {
canvas = createCanvas(680, 420);
canvas.mousePressed(inWidth);
background(51);
// Calling noStroke once here to avoid unecessary repeated function calls
noStroke();
// iterate over the table rows
for (var i = 0; i < clContext.getRowCount(); i++) {
var category = clContext.get(i, "category");
var statement = clContext.get(i, "statement");
var polarity = clContext.get(i, "polarity");
statements[i] = new Statement(category, polarity, statement);
}
}
function draw() {
if (mouseIsPressed) {
background(51);
for (var i = 0; i < statements.length; i++) {
statements[i].display();
}
}
}
我添加它只是为了为我尝试拆分的数据类型提供上下文。似乎有两点我可以进行拆分:statement
设置中创建的statements
数组或构造函数中的数组。这意味着如果我进入我的数据文件并添加\n
我想要拆分的位置,这很容易,因为只有 20 条语句,那么最好如何以及在哪里构造一个RegExp
拆分这些行的最佳方法?