我正在开发一个程序,并希望对Javascript的区别有所了解。在我的程序中,我有一个黑名单数组,其中包含不允许在我的最终结果中的值,如下所示:
blacklist = ["One", "Two", "Four"]
someArr = ["One", "Three", "Five", "Two", "One"]
//Desired result = ["Three", "Five"]
我从另一个Stack问题中找到了一个很棒的提示(下面显示的代码)。
Array.prototype.diff = function(a) {
return this.filter(function(i) {return !(a.indexOf(i) > -1);});
};
////////////////////
// Examples
////////////////////
[1,2,3,4,5,6].diff( [3,4,5] );
// => [1, 2, 6]
["test1","test2","test3","test4","test5","test6"].diff(["test1","test2","test3","test4"]);
// => ["test5", "test6"]
问题是我需要将字符串数组与3维数组中的特定键进行比较。以下是我的结构:
Array1 = [collab1: "Name, Someone's",
collab2: "Else, Somebody",
...: ...],
[collab1: "Else, Somebody",
collab2: "Thornton, Billy Bob",
...: ...];
Array2 = ["Name, Someone's", "Else, Somebody", "Thornton, Billy Bob"]
我想使用diff类来检查针对Array2的每个索引的collab1。这可能吗?
答案 0 :(得分:1)
比较任何2个对象的解决方案:
var
array_tools = {};
array_tools.filter = function(Arr,fun){
if(typeof Array.prototype.filter === 'undefined'){ // Допиливание функциональности массивов для IE
//filter = function( fun ){ // , thisp
var len = Arr.length;
if(typeof fun != "function") throw new TypeError();
var res = [], thisp = arguments[1];
for(var i=0;i<len;i++){
if(i in Arr){
var val = Arr[i]; // in case fun mutates this
if(fun.call(thisp, val, i, Arr)) res.push(val);
}
}
return res;
}
else{
return Arr.filter(fun);
}
};
var compare_objects = function( firstObj, secondObject ){
var get_keys = function(O){
var A = [];
for(var key in O) A.push(key);
return A;
},
keysFirstObj = get_keys(firstObj),
keysSecondObject = get_keys(secondObject);
if( keysFirstObj.length != keysSecondObject.length ){
return false;
}
return !array_tools.filter( keysFirstObj, function(key){
if( typeof firstObj[key] == "object" || $.isArray(firstObj[key]) ){
return !compare_objects(firstObj[key], secondObject[key]);
}
else{
return firstObj[key] !== secondObject[key];
}
} ).length;
}
比较2个对象:compare_objects(Obj1, Obj2)
。如果这是真的 - 他们是平等的。
<强> ADDITION 强>
$.isArray
来自jQuery。如果你不需要jQuery - 打开它的完整源代码并只复制这个工具。