2011-08-24 25 views
1

我有两个数组合并两个数组:如何比较jQuery中

existing_names = username1, username2, username3; 

new_names = username1, username4, username5; 

我的输出应该是:

new_names = username1, username2, username3, username4, username5; 

使用jQuery我怎么能做到这一点...

+0

您可以用JavaScript做到这一点...看看这个问题 http://stackoverflow.com/questions/1584370/how-to-merge-two-arrays-in-javascript –

回答

0

使用snook的OC功能,使用纯Javascript可以轻松实现。可能被做短用jQuery,但总是有趣的事情,而不:)

DEMO:http://jsfiddle.net/wesbos/MvurR/

var existing_names = ["username1", "username2", "username3"]; 

var new_names = ["username1", "username4", "username5"]; 

/* http://snook.ca/archives/javascript/testing_for_a_v */ 

function oc(a) 
{ 
    var o = {}; 
    for(var i=0;i<a.length;i++) 
    { 
    o[a[i]]=''; 
    } 
    return o; 
} 


for (var i=0; i < existing_names.length; i++) { 
    if (!(existing_names[i] in oc(new_names))) { 
     new_names.push(existing_names[i]); 
    } 
} 

console.log(new_names); 
+2

你真的在循环的每次迭代中创建所有new_names的对象吗?这不是非常有效。你真的应该在循环之前移动oc函数调用。 – jfriend00

0

http://jsfiddle.net/AYgNW/3/

var existing_names = ['username1','username2','username3']; 
var new_names = ['username1','username4','username5']; 

function mergeArrays(a1, a2) { 

    var len1 = a1.length; 
    var len2 = a2.length; 
    var found = false; 

    for (var x = 0; x < len2; x += 1) { 

     found = false; 

     for (var y = 0; y < len1; y += 1) { 
      if (a1[y] === a2[x]) { 
       found = true; 
       break; 
      } 
     } 

     if (! found) { 
      a1.push(a2[x]); 
     } 

    } 

    return a1; 

} 

// merge arrays 
new_names = mergeArrays(new_names, existing_names); 

// sort the resulting array 
new_names.sort(); 

for (var x = 0; x < new_names.length; x += 1) { 
    document.write(new_names[x] + ', '); 
}