2015-10-23 27 views
8

Co jest najłatwiejszy sposób (z "natywnym" javascript) do duplikowania każdego elementu tablicy javascript?Jak duplikować elementy w tablicy js?

Zamówienie ma znaczenie.

Na przykład:

a = [2, 3, 1, 4] 
// do something with a 
a 
// a is now [2, 2, 3, 3, 1, 1, 4, 4] 
+0

Niekorzystny/zalecany/niezawodny, ale regex może być również używany. 'a = a.join (','). replace (/ (\ d +)/g," $ 1, $ 1 ") split (','). map (Number);' – Tushar

+0

@Tushar Ładny pomysł. Jednak, jak już zakładałeś, szukam ogólnego rozwiązania, które działa również z tablicami łańcuchów, które mogą zawierać przecinki ... –

+0

** Najlepszymi odpowiedziami na to pytanie wydają się gry o złożonym kodzie golfowym **. Nie używaj zmniejszenia, intencja jest bardzo niejasna. Czasem pętla for jest poprawną odpowiedzią, przepraszam. –

Odpowiedz

5

wymyśliłem coś podobnego do tymeJV „s odpowiedź

[2, 3, 1, 4].reduce(function (res, current, index, array) { 
    return res.concat([current, current]); 
}, []); 
+1

Ah mnie pokonać, to właśnie dostanę iść na kawę przed napisaniem odpowiedź! +1 – epascarello

+2

Haha :) kawa to dobry powód, aby nie otrzymywać ciasteczek! – axelduch

+0

Nie rozumiem, dlaczego dwa ostatnie parametry ('index',' tablica') są potrzebne, jeśli nie widzę ich używane. Czy ktoś może to wyjaśnić? – MarksCode

5

Przypuszczam, że można zrobić:

var duplicated = a.map(function(item) { 
    return [item, item]; 
}).reduce(function(a, b) { return a.concat(b) }); 

//duplicated: [2, 2, 3, 3, 1, 1, 4, 4] 
+1

Czy nie jest "Map" ES6? W takim przypadku mogą występować problemy ze zgodnością tego rozwiązania. –

+0

map + reduce + concat wydaje się być przesadzone. Zredukuj lepiej. – James

+1

@EricHerlitz - '.map' to ES5. – tymeJV

1

zasadniczo:

a = [2, 3, 1, 4]; 
b=[]; 

for(var i = 0; i< a.length;++i){ 
    b.push(a[i]); 
    b.push(a[i]); 
} 

a=b; 
+1

To jest jedyna odpowiedź, która nie zrobiła ze mnie WTF. To nudne, ale zamiar jest jasny. –

1

Po prostu splajnij trochę.

var a = [2, 3, 1, 4], 
 
    i = a.length; 
 
while (i--) { 
 
    a.splice(i, 0, a[i]); 
 
} 
 
document.write('<pre>' + JSON.stringify(a, 0, 4) + '</pre>');

1

natknąłem ten problem w mojej aplikacji, więc stworzyłem tę funkcję:

function duplicateElements(array, times) { 
    return array.reduce((res, current) => { 
     return res.concat(Array(times).fill(current)); 
    }, []); 
} 

Aby go użyć, prosty mijamy tablicę, a ile razy chcesz, aby elementy zostały powielone: ​​

duplicateElements([2, 3, 1, 4], 2); 
0

Te f unkcje mogą pomóc w zobaczeniu .sort(), .concat()

function duplicate(arr) { 
    return arr.concat(arr).sort() 
} 
console.log(duplicate([1,2,3,4,5])) 
+0

W pytaniu wyraźnie wspomniano ** Zamówienie ma znaczenie. ** – Durga

+0

dzięki @Davut .. dodanie sortowania() rozwiązałoby to – tallgirltaadaa