Node.js + ObjectArray +比较

是否有可能在JavaScript中比较2个对象数组。 我的要求是我必须比较2个对象数组,我必须采取这两个对象数组之间的公共对象:

考虑第一个对象数组:

[ { id_0: 356, name_0: 'xxxxx', id_1: 33, name_1: 'yyyyyy', id_2: 602, name_2: 'zzzzzzz', collecteddate: '31/03/2011', key: 'kkkkkkk', value: '0.41' }, { id_0: 356, name_0: 'xxxxxx', id_1: 33, name_1: 'yyyyyy', id_2: 602, name_2: 'zzzzzz', collecteddate: '31/03/2011', key: 'k1k1k1k1k1', value: '0.20' }, { id_0: 356, name_0: 'xxxxx', id_1: 33, name_1: 'yyyyy', id_2: 602, name_2: 'zzzzzz', collecteddate: '31/03/2011', key: 'k2k2k2k2k2k2k2', value: '1.30' }}] 

我的第二个对象数组:

 [ { id_0: 356, name_0: 'xxxxx', id_1: 33, name_1: 'yyyyyy', id_2: 602, name_2: 'zzzzzzz', collecteddate: '31/03/2011', key: 'kkkkkkk', value: '0.41' }, { id_0: 356, name_0: 'xxxxxx', id_1: 33, name_1: 'yyyyyy', id_2: 602, name_2: 'zzzzzz', collecteddate: '31/03/2011', key: 'k1k1k1k1k1', value: '0.20' }, { id_0: 356, name_0: 'xxxxx', id_1: 33, name_1: 'yyyyy', id_2: 602, name_2: 'zzzzzz', collecteddate: '31/03/2011', key: 'k2k2k2k2k2k2k2', value: '1.30' }}] 

我必须比较上述2个对象,我必须build立另一个对象与上述2的共同条目。在上面的例子中,每个条目是相同的2个数组,所以第三个数组应该包含3个条目。 是否有可能做到这一点..帮我解决这个问题..预先感谢….

编辑:

我已经使用_(下划线)库来检查2个对象是否相等,如果相等,我把这个对象放到新的数组中。不pipe是不是好的解决scheme。

没有第三个库的解决scheme – 纯JavaScript

像这样(recursion) – 可以优化,但可读性较差。

 var compareAndMerge = function(object1, object2) { var outputObject = {}; var compareSubObject = function(object1, object2) { var outputObject = {}; for (var k in object1) { for (var k2 in object2) { if (typeof object1[k] === 'object' && typeof object2[k2] === 'object') { var sameObject = compareSubObject(object1[k], object2[2]); if (sameObject === false) { return false; } outputObject[k] = object1[k]; } else if (object1[k] === object2[k]) { outputObject[k] = object1[k]; } else { return false; } } } return outputObject; }; for (var k in object1) { for (var k2 in object2) { if (typeof object1[k] !== 'object' && object1[k] === object2[k]) { outputObject[k] = object1[k]; } else if (typeof object1[k] === 'object') { var sameObject = compareSubObject(object1[k], object2[k]); if (sameObject !== false) { outputObject[k] = sameObject; } } } } return outputObject; }; 

在这里查看jsfiddle示例

注意:此解决scheme假定对象的所有值将是string或数字。

 function getCommonObjects(array1, array2) { var result = []; for (var i = 0; i < array1.length; i += 1) { for (var j = 0; j < array2.length; j += 1) { if (Object.keys(array1[i]).length === Object.keys(array2[j]).length){ var flag = true; for (var key in array1[i]) { if (array1[i][key] !== array2[j][key]) { flag = false; break; } } if (flag) { result.push(array2[j]); break; } } } } return result; }