使用Jquery在Javascript中比较2个列表/表

时间:2016-04-19 22:27:20

标签: javascript jquery

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

表1有2列:

desvar_twc

表2还有2列:

Col B  |   Col C

row 11  | row 12 
row 21  | row 22 
row 31  | row 32 

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

预期结果

Col B  |   Col C

row 21  | row 22 
row 21  | row 01 
row 11  | row 12

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

样本清单:

Col B  |   Col C

row 11  | row 12
row 21  | row 22 
row 31  | row 32
row 21  | row 01 

1 个答案:

答案 0 :(得分:0)

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

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

$(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>