使用Jquery比较Javascript中的两个列表/表

Comparing 2 lists/Tables in Javascript using Jquery

本文关键字:两个 列表 比较 Jquery Javascript 使用      更新时间:2023-09-26

我有两个表,比如表1和表2。

表1有2列:

Col B  |   Col C
row 11  | row 12 
row 21  | row 22 
row 31  | row 32 

表2还有2列:

Col B  |   Col C
row 21  | row 22 
row 21  | row 01 
row 11  | row 12

我想将表1与表2进行比较,并做一些事情;比较两个表,并确保表1中所有缺失的值都以相同的顺序添加到表2中。

预期结果

Col B  |   Col C
row 11  | row 12
row 21  | row 22 
row 31  | row 32
row 21  | row 01 

我尝试在两个表上使用foreach循环实现,假设表来自JSON结构,但我不确定我做得是否正确。实现上述结果的最佳方式是什么?感谢

样品清单:

{
    "defaultValue": [{
        "CellValues": [{
            "defaultValue": "row 11"
        }, {
            "defaultValue": "row 12"
        }]
    }, {
        "CellValues": [{
            "defaultValue": "row 21"
        }, {
            "defaultValue": "row 22"
        }]
    },{
        "CellValues": [{
            "defaultValue": "row 31"
        }, {
            "defaultValue": "row 32"
        }]
    }]
}    
$.each(Table1, function (Table1RowIndex, Table1Rowvalue) {
    $.each(Table1Rowvalue.cells)(), function (Table1CellIndex, Table1Cellvalue) {
        $.each(Table2, function (Table2rowIndex, Table2row) {
            $.each(Table2.cells(), function (Table2cellIndex, Table2cell) {
                //
                }
            });
        });
    });
});

我认为您想要做3个嵌套循环,而不是4个。您对行执行了适当的嵌套循环,但当您循环表1的列时,您只需使用索引从表2中获得相应的列。

复制其中一个表作为输出也是一个好主意。。。更改正在循环的数组可能会导致问题。

$(document).ready(function() {
	var t1 = {
		"defaultValue": [
			{"CellValues": [
				{ "defaultValue": "row 11" }, 
				{ "defaultValue": "row 12" }]
			}, {"CellValues": [
				{ "defaultValue": "row 21" }, 
				{ "defaultValue": "row 22" }]
			}, { "CellValues": [
				{ "defaultValue": "row 31" }, 
				{ "defaultValue": "row 32" }] 
			}
		]
	};
	var t2 = {
		"defaultValue": [
			{"CellValues": [
				{ "defaultValue": "row 21" }, 
				{ "defaultValue": "row 22" }]
			}, {"CellValues": [
				{ "defaultValue": "row 21" }, 
				{ "defaultValue": "row 01" }]
			}, { "CellValues": [
				{ "defaultValue": "row 11" }, 
				{ "defaultValue": "row 12" }] 
			}
		]
	};
	var out = JSON.parse(JSON.stringify(t1)); // clone t1 to use as output
	$.each(t2.defaultValue, function(i2, r2) {
		var rowMatch = false;
		$.each(t1.defaultValue, function(i1, r1) {
			var cellMatch = true;
			$.each(r1.CellValues, function(j, c1) {
				var c2 = r2.CellValues[j];
				if(c1.defaultValue!=c2.defaultValue) {
					cellMatch = false;
					return false;
				}
			});
			if(cellMatch) {
			    rowMatch = true;
			    return false;
			}
		});
		if(!rowMatch) { 
			// r1 does not exist in t2, so we need to add it
			out.defaultValue.push(r2);
		}
	});
	log(JSON.stringify(out));
});
function log() {
	var s = '';
	$.each(arguments, function() {
		s += " " + this;
	});
	$('#out').append(s+"<br>");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id=out></div>