2013-01-17 64 views
1

假设我有此数组中的JavaScriptJavaScript的阵列中的另一个阵列复制

ar = ['C241C12A-45FD-40FF-B26E-B879107E584D||20', 
     'AB1BB99D-4396-415A-A5D8-1BEF3E0149CE||33', 
     'ADE54113-53D1-4F26-A01C-48EBE37E3CE8||85', 
     'DB500FD1-5988-4202-A4AA-727AC29AC67A||85', 
     '8A8EAB5A-E0D2-4AA8-96A0-42686FF5EB0C||10', 
     '50C29E8A-16C7-4FC2-A186-C3D65F23C627||200', 
     '70C79BBB-14C7-4F34-346B-CSSSDFVFZZZ7||200' 
    ]; 

有没有什么办法让像管道符号后到来这

newarray1 = [ 
     'ADE54113-53D1-4F26-A01C-48EBE37E3CE8||85', 
     'DB500FD1-5988-4202-A4AA-727AC29AC67A||85' 
     ]; 
newarray2 = [ 
     '50C29E8A-16C7-4FC2-A186-C3D65F23C627||200', 
     '70C79BBB-14C7-4F34-346B-CSSSDFVFZZZ7||200' 
     ]; 

重复值阵列,抢到即价值并形成基于此的新阵列

+0

Loop通过条目并创建新的阵列是一种方法。不知道是否可以有一个更有效的方式来做到这一点。 – ryadavilli

+0

你的例子似乎没有被排序,'85'和'200'之间有'10'? – Bergi

+0

@Bergi ..这个字符串多数民众赞成在为什么..删除该行 – coolguy

回答

2
var arraysByKey = {}; 
for (var i=0; i<ar.length; i++) { 
    var key = ar[i].split("||")[1]; 
    if (key in arraysByKey) 
     arraysByKey[key].push(ar[i]); 
    else 
     arraysByKey[key] = [ ar[i] ]; 
} 

结果(arraysByKey)看起来是这样,那么:

{ 
    "10": [ 
     "8A8EAB5A-E0D2-4AA8-96A0-42686FF5EB0C||10" 
    ], 
    "20": [ 
     "C241C12A-45FD-40FF-B26E-B879107E584D||20" 
    ], 
    "33": [ 
     "AB1BB99D-4396-415A-A5D8-1BEF3E0149CE||33" 
    ], 
    "85": [ 
     "ADE54113-53D1-4F26-A01C-48EBE37E3CE8||85", 
     "DB500FD1-5988-4202-A4AA-727AC29AC67A||85" 
    ], 
    "200": [ 
     "50C29E8A-16C7-4FC2-A186-C3D65F23C627||200", 
     "70C79BBB-14C7-4F34-346B-CSSSDFVFZZZ7||200" 
    ] 
} 

如果只想阵列,其中 “重复值” 的存在,只是筛选结果:

for (var key in arraysByKey) 
    if (arraysByKey[key].length < 2) 
     delete arraysByKey[key]; 
+0

你会得到一个这样的错误。 –

+0

@ RicardoLohmann:已经修复 – Bergi

+0

@Bergi一个疑问如何检查是否存在重复我的意思是'如果(arraysByKey.length> 0){'但它给了我未定义的错误..尽管它有一些 – coolguy

1
var keyArray = {}; 

for (var counter = 0; counter < ar.length; counter++) 
{ 
    var arValue = ar[ counter ]; 
    var intVal = ar.split("||")[1]; 

    if (keyArray[ intVal ] == null || keyArray[ intVal ] == undefined) 
    { 
    keyArray[ intVal ] = new Array(); 
    } 
    keyArray[ intVal ].push(arValue ); 
} 
filterDuplicates(); 

function filterDuplicates(keyArray) 
{ 
    for (key in keyArray) 
    { 

    keyArray[key] = keyArray[key].filter(function(elem, pos, self) { 
    return self.indexOf(elem) == pos; 
    } 
    } 
return keyArray(); 

) 

}

现在你已经在'keyArray'对象的每个索引值中有一个数组了

+0

谢谢你+ 1ed努力 – coolguy

+0

你总是欢迎:) – gurvinder372

1

这不是最优雅的解决方案,但它会给你一个你想要的数组的对象。

dupecheck = {}; 
dupes = {}; 
$.each(ar, function() { 
    var num = this.split('||')[1]; 

    if (typeof dupecheck[num] !== 'undefined') { 
     if (typeof dupes[num] === 'undefined') { 
     dupes[num] = []; 
     dupes[num].push(dupecheck[num]); 
     } 
     dupes[num].push(this); 
    } 

    dupecheck[num] = this; 
}); 

http://jsfiddle.net/38wme/

+0

谢谢你+努力 – coolguy

相关问题