यहां एक वैकल्पिक एल्गोरिदम है जो लचीला होना चाहिए और बेहतर प्रदर्शन करना चाहिए। उनमें से एक सुधार यह है कि आप अपना खुद का तुलना फ़ंक्शन निर्दिष्ट कर सकते हैं ताकि आपके मामले में आप आईडी की तुलना कर सकें यदि यह एक अद्वितीय पहचानकर्ता है।रेखांकित _.isEqual() फ़ंक्शन, इसलिए जैसे
var a = [ { id: 1, name: 'jake' }, { id: 4, name: 'jenny'} ];
var b = [ { id: 1, name: 'jake' }, { id: 9, name: 'nick'} ];
var c = [ { id: 1, name: 'jake' }, { id: 4, name: 'jenny'}, { id: 9, name: 'nick'} ];
var result = intersectionObjects(a, b, c, function(item1, item2) {
return item1.id === item2.id;
});
या आप समारोह छोड़ सकते हैं और इसका इस्तेमाल होगा:
var result = intersectionObjects(a, b, c);
function intersectionObjects2(a, b, areEqualFunction) {
var results = [];
for(var i = 0; i < a.length; i++) {
var aElement = a[i];
var existsInB = _.any(b, function(bElement) { return areEqualFunction(bElement, aElement); });
if(existsInB) {
results.push(aElement);
}
}
return results;
}
function intersectionObjects() {
var results = arguments[0];
var lastArgument = arguments[arguments.length - 1];
var arrayCount = arguments.length;
var areEqualFunction = _.isEqual;
if(typeof lastArgument === "function") {
areEqualFunction = lastArgument;
arrayCount--;
}
for(var i = 1; i < arrayCount ; i++) {
var array = arguments[i];
results = intersectionObjects2(results, array, areEqualFunction);
if(results.length === 0) break;
}
return results;
}
आप इस तरह उपयोग कर सकते हैं आप इसे यहां जेएसफ़िल्ड पर पा सकते हैं: http://jsfiddle.net/luisperezphd/43vksdn6/
स्रोत
2011-12-30 19:35:15
यह आश्चर्यजनक है कि इनमें से कोई भी एपीआई समानता-परीक्षक फ़ंक्शन को पारित करने की अनुमति नहीं देता है। – Pointy