JavaScript选择同一行、多列(CSV)



这是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。

描述与代码一起令人困惑。

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

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

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

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

您的意思是比较不同行之间不相同的部分(例如00:11:1f:10:13到1011.2.1(?

你的情况表明并非如此:

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

它尝试将任何一行与MAC地址00:11:1F:AC:ba:39相匹配。注意CCD_ 4指向第二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地址。

最新更新