jQuery/Javascript将两个表相互比较

jQuery/Javascript将两个表相互比较,javascript,jquery,Javascript,Jquery,我需要比较两个HTML表的行,假设第一个单元格中的数据可以复制,但第二个单元格中的数据总是唯一的。我需要找出表1中的第一个单元格和第二个单元格是否与表2中的第一个单元格和第二个单元格的数据相同,例如: 表1: <Table> <tr> <td>123</td> <td>321</td> </tr> <tr> <td>5

我需要比较两个HTML表的行,假设第一个单元格中的数据可以复制,但第二个单元格中的数据总是唯一的。我需要找出
表1中的第一个单元格和第二个单元格是否与
表2中的第一个单元格和第二个单元格的数据相同,例如:

表1:

<Table>
    <tr>
        <td>123</td>
        <td>321</td>
    </tr>
    <tr>
        <td>545</td>
        <td>345</td>
    </tr>
    <tr>
        <td>0</td>
        <td>312</td>
    </tr>
    <tr>
        <td>123</td>
        <td>323331</td> 
    </tr>
</Table>
我哪里出错了

我想再次澄清:

第二张表显示: 第1排-约翰|喜欢库克 第2行-peter | likesOranges

第一张表显示: 第1行-约翰什么都不喜欢 第2排-约翰|喜欢库克 第3排-steward |喜欢谈话 第4行-彼得|喜欢苹果

现在应该说: 约翰-好的 彼得-价值失败


如果我理解您的要求,那么阅读第一个表格并将夫妇存储为字符串将更容易:123/321、545/345等

然后可以读取第二个表并从第一个列表中删除在这两个表中找到的所有行。
列表中剩下的是不匹配的夫妇。

如果我理解您的要求,那么阅读第一个表并将夫妇存储为字符串会更容易:123/321、545/345等

然后可以读取第二个表并从第一个列表中删除在这两个表中找到的所有行。
列表中剩下的是不匹配的对。

从效率的角度来看,如果只循环一次第一个表,并使用第一个单元格值作为键和第二个单元格的值数组创建一个对象,则不必多次循环该表

这也使得查找更简单

var firstTable = $('#firstDiv table tr');
var secondTable = $('#secDiv table tr');

var firstTableData = {}
firstTable.each(function() {
  var $tds = $(this).find('td'),
    firstCellData = $tds.eq(0).html().trim(),
    secondCellData == $tds.eq(1).html().trim();

  if (!firstTableData[firstCellData]) {
    firstTableData[firstCellData] = []
  }
  firstTableData[firstCellData].push(secondCellData)
})

$(secondTable).each(function(index) {
  var $tds = $(this).find('td');
  var secTableCellZero = $tds.eq(0).html().trim();
  var secTableCellOne = $tds.eq(1).html().trim();

  if (!firstTableData.hasOwnProperty(secTableCellZero)) {
    console.log('No match for first cell')
  } else if (!firstTableData[secTableCellZero].indexOf(secTableCellOne) == -1) {
     console.log('No match for second cell')
  }
});

我不确定当从效率的角度看没有找到匹配项时,目标是什么如果只循环一次第一个表,并使用第一个单元格值作为键和第二个单元格的值数组创建一个对象,则不必多次循环该表

这也使得查找更简单

var firstTable = $('#firstDiv table tr');
var secondTable = $('#secDiv table tr');

var firstTableData = {}
firstTable.each(function() {
  var $tds = $(this).find('td'),
    firstCellData = $tds.eq(0).html().trim(),
    secondCellData == $tds.eq(1).html().trim();

  if (!firstTableData[firstCellData]) {
    firstTableData[firstCellData] = []
  }
  firstTableData[firstCellData].push(secondCellData)
})

$(secondTable).each(function(index) {
  var $tds = $(this).find('td');
  var secTableCellZero = $tds.eq(0).html().trim();
  var secTableCellOne = $tds.eq(1).html().trim();

  if (!firstTableData.hasOwnProperty(secTableCellZero)) {
    console.log('No match for first cell')
  } else if (!firstTableData[secTableCellZero].indexOf(secTableCellOne) == -1) {
     console.log('No match for second cell')
  }
});

我不确定找不到匹配项时的目标是什么

检查此工作小提琴:

我创建了两个数组,它们将表1和表2的每一行中的值存储为字符串。然后,我只是比较这两个数组,看看数组1中的每个值是否与使用标志变量的数组2中的值匹配


片段:

$(文档).ready(函数(){
var表_one=[];
var表_two=[];
$(“#一个tr”)。每个(函数(){
var temp_string=“”;
计数=1;
$(this.find(“td”).each(function(){
如果(计数=2){
临时字符串+=“/”;
}
temp_string=temp_string+$(this).text();
计数++;
});
表1.推送(临时字符串);
});
$(“#两个tr”)。每个(函数(){
var temp_string=“”;
计数=1;
$(this.find(“td”).each(function(){
如果(计数=2){
临时字符串+=“/”;
temp_string=temp_string+$(this).text();
}否则{
temp_string=temp_string+$(this).text();
}
计数++;
});
表2.推送(临时字符串);
});
var message=“”;
对于(i=0;i”;
}else if(标志==0){
消息+=表2单元格1+“未在第一个表中找到
”; } } $('#message').html(message); });


123 321 545 345 0 312 123 323331
545 345 545 3122 123 321

检查此工作小提琴:

我创建了两个数组,它们将表1和表2的每一行中的值存储为字符串。然后,我只是比较这两个数组,看看数组1中的每个值是否与使用标志变量的数组2中的值匹配


片段:

$(文档).ready(函数(){
var表_one=[];
var表_two=[];
$(“#一个tr”)。每个(函数(){
var temp_string=“”;
计数=1;
$(this.find(“td”).each(function(){
如果(计数=2){
临时字符串+=“/”;
}
temp_string=temp_string+$(this).text();
计数++;
});
表1.推送(临时字符串);
});
$(“#两个tr”)。每个(函数(){
var temp_string=“”;
计数=1;
$(this.find(“td”).each(function(){
如果(计数=2){
临时字符串+=“/”;
temp_string=temp_string+$(this).text();
}否则{
temp_string=temp_string+$(this).text();
}
计数++;
});
表2.推送(临时字符串);
});
var message=“”;
对于(i=0;ivar firstTable = $('#firstDiv table tr');
var secondTable = $('#secDiv table tr');

var firstTableData = {}
firstTable.each(function() {
  var $tds = $(this).find('td'),
    firstCellData = $tds.eq(0).html().trim(),
    secondCellData == $tds.eq(1).html().trim();

  if (!firstTableData[firstCellData]) {
    firstTableData[firstCellData] = []
  }
  firstTableData[firstCellData].push(secondCellData)
})

$(secondTable).each(function(index) {
  var $tds = $(this).find('td');
  var secTableCellZero = $tds.eq(0).html().trim();
  var secTableCellOne = $tds.eq(1).html().trim();

  if (!firstTableData.hasOwnProperty(secTableCellZero)) {
    console.log('No match for first cell')
  } else if (!firstTableData[secTableCellZero].indexOf(secTableCellOne) == -1) {
     console.log('No match for second cell')
  }
});