【问题标题】:JavaScript select same row, multi columns (CSV)JavaScript 选择同一行、多列 (CSV)
【发布时间】:2021-01-14 01:18:24
【问题描述】:

这是 P5.js,这是一个非常愚蠢和简单的问题。 https://editor.p5js.org/kornfusion/sketches/5xtb88Ntn

  for (let i = 0; i < table.getRowCount(); i++){
    for (let j = 0; j < table.getRowCount(); j++){
    if (table.getRow(i).arr[1] = '00:11:1F:AC:ba:39') {
      j = table.getRowCount(i).length;
      textSize(155);
      text(table.getRow(i).arr[2], 400, 540);
    }
  }
}

我正在尝试将 mac 地址与 IP 匹配。如果它们匹配,请将它们放在圆圈旁边。圆圈已经在草图中,我只需要 CSV 文件中的数据并遍历每一行以找到 MAC。

【问题讨论】:

  • “table”变量与 csv 有什么关系?
  • 您遇到了哪些问题?无论是功能示例还是问题的详细描述都会非常有帮助。
  • 我想从 CSV 文件创建一个地图,其中显示 10 个圆圈,每个圆圈上都有 IP 和 MAC 地址。我想从 CSV 文件中提取 IP 和 MAC 并将它们存储为变量所以我可以很好地使用它们。
  • 1.你应该给我们更多关于你的代码的上下文:你正在调用一个 text 函数,但我不确定你把它放在 draw() 函数中,这会阻止显示任何东西 2. 你想用第二个 @ 做什么987654327@ 与j 循环,看起来它不应该存在,因为您随后将另一个值分配给j 并且不要使用它。 3. 你能告诉我们table 对象的样子吗? .arr[X] 语法看起来很奇怪 4. 总而言之,分享a minimal reproducible example 将极大地帮助其他人帮助你。
  • 感谢您的信息。我希望这会有所帮助:editor.p5js.org/kornfusion/sketches/5xtb88Ntn

标签: javascript p5.js


【解决方案1】:

描述与代码混淆。

我正在尝试将 mac 地址与 IP 匹配。如果匹配,就把它们放在圆圈旁边。

您的意思是将 MAC 地址的一部分与 IP 地址的一部分匹配吗?

您示例中的 MAC 地址如下所示:00:11:1f:10:11:13

您示例中的 IP 地址如下所示:10.11.2.1

您的意思是比较跨行不同的部分(例如 00:11:1f:10:11:13 到 10.11.2.1 )?

您的情况另有说明:

if (table.getRow(i).arr[1] = '00:11:1F:AC:ba:39')

它会尝试匹配任何带有 MAC 地址00:11:1F:AC:ba:39 的行。 请注意,arr[1] 指向第二个 CSV 列:“模型”。 MAC 地址是第四列(在索引 3 处(例如table.getRow(i).arr[3])) 或者,您可以通过列名检索它,因为 CSV 有一个标题:

table.getRow(i).obj["MAC address"]

如果您要遍历所有行,则应该使用一个 for 循环。 此外,您需要处理 MAC 地址不在列表中的边缘情况。

例如

  let foundIP = null;
  for (let i = 0; i < table.getRowCount(); i++){
      let currentRow = table.getRow(i);
      if (currentRow.obj['MAC address'] === '00:11:1F:AC:ba:39'){
        foundIP = currentRow.obj['IP address'];
        break;
      }
    }

  
  if(foundIP){
    console.log('foundIP',foundIP);
  }else{
    console.log('no IP found for MAC 00:11:1F:AC:ba:39');
  }

注意:

  • currentRow 被重复使用(而不是在每个循环中多次调用 table.get()):特别是当您必须处理许多行时,这很有效
  • 在 JS 中 == 有效,但建议使用 ===,因为它还会检查数据类型是否匹配
  • break 用于在找到匹配项后跳出 for 循环。 (如果还没有找到Row 将没有有效值)

这可以很容易地封装在一个可重用的函数中:

function findIP(table, macAddress) {
  for (let i = 0; i < table.getRowCount(); i++) {
    let currentRow = table.getRow(i);
    if (currentRow.obj['MAC address'] === macAddress) {
      return currentRow.obj['IP address'];
    }
  }
}

在这种情况下,结果是 IP(如果找到)或 undefined(如果未找到匹配项):

  let macToFind = '00:11:1F:AC:ba:39'
  let foundIP = findIP(table, macToFind);

  if (foundIP) {
    console.log('foundIP', foundIP);
  } else {
    console.log('no IP found for MAC ' + macToFind);
  }

这应该使它足够灵活,可以在需要时搜索多个表和 MAC 地址。

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 2016-05-20
    • 2018-10-12
    • 1970-01-01
    • 2020-07-12
    • 2015-09-25
    • 2023-03-11
    • 2021-11-17
    相关资源
    最近更新 更多