P5阵列相交

P5 array intersection

我正在尝试从一个数组的索引中提取另一个数组的值。我正在使用 loadStrings 加载两个文本文件,它工作正常。我正在将该数据加载到两个单独的数组中。这两个文本文件的长度不同,第一个包含三个值 - 行号,然后是 x 和 y 坐标。第二个文本文件包含我要从第一个文本文件中提取的数据的行号。仅落后两个月的编码时间,这是一项极其艰巨的任务,让我完全陷入困境!到目前为止,我的(非常基本的)代码如下:

let data1;
let data2;
let parsedData1;
let parsedData2;
let combinedData;

function preload() {
  data1 = loadStrings('assets/data1.txt'); // load the data1 file
  data2 = loadStrings('assets/data2.txt'); // load the data2 file
  // console.log(data1);
  // console.log(data2);
}

function setup() {
  createCanvas(600, 400);   
}

function draw() {
  noLoop();
  background(0);
  
  readData1()
  readData2()
}

function readData1() {
  parsedData1 = new Array(data1.length); // create an array for the parsed data

  for (let i = 0; i < data1.length; i++) {
    let parsedData1 = splitTokens(data1[i]);
    // console.log(data1); 
  }
}

function readData2() {
  let combinedData = concat(parsedData1, data2);
  // console.log(combinedData);
}

我正在加载的文本文件包含以下内容:

文本 1:

1 200 50
2 100 25
3 200 63
4 123 456
5 124 200
6 700 500
7 600 500
8 200 121
9 300 100

文本 2:

3
5
8

我要的结果是:

3 150 100
5 124 200
8 200 121

显然可以使用循环实现所需的结果,但我还没有弄清楚如何实现!

为了比较两个字符串,它们需要在数组中(或类似的东西)。

看看:

  let text1 = document.getElementById("originaltext").innerHTML.trimRight();
  let compare1 = document.getElementById("comparevalues").innerHTML.trimRight();
  let a1 = text1.split("\n");
  console.log(a1);
  let c1 = compare1.split("\n");
  console.log(c1);
  const r1 = a1.filter(a => c1.includes(a.split(" ")[0]));
  console.log(r1);
<pre id="originaltext">
1 200 50
2 100 25
3 200 63
4 123 456
5 124 200
6 700 500
7 600 500
8 200 121
9 300 100
</pre>
<pre id="comparevalues">
3
5
8
</pre>

这会从示例中的 PRE 标记中读取字符串(但会从您的原始文本字符串中读取)并将它们转换为数组。如果第一个数字出现在第二个列表中并且returns一个新的结果数组

,则使用“包含”过滤第一个列表

既然你提到了循环,下面是如何使用循环来实现:

如果您知道 data1.txt 中的“索引号”不要跳过任何数字:

for(let i = 0; i < data2.length; i++) {
  let index = data2[i];
  console.log(data1[index]);
}

否则,您可以像这样使用嵌套循环:

for(let i = 0; i < data2.length; i++) {
  let index = data2[i];
  for(let j = 0; j < data1.length; j++)
  {
    let line = data1[j];
    let lineArr = line.split(" ");
    if(lineArr[0] == index) {
      console.log(line);
    }
  }
}