2015-10-23 19 views
8

javascript配列のすべての要素を複製する最も簡単な方法(「ネイティブ」javascriptを使用)js配列の要素を複製する方法は?

注文の問題。例えば

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

推奨されていませんが、正規表現は使用できません。 – Tushar

+0

@Tushar素敵なアイデアです。 "a = a.join( '、')。(/(\ d +)/ g、" $ 1、$ 1 ")を置き換えます。しかし、あなたがすでに想定しているように、私はコンマを含む可能性のある文字列の配列でも動作する一般的なソリューションを探しています。 –

+0

**この質問へのトップの答えは、複雑なコードのゴルフ**のようです。削減を使用しないでください、意図は非常に不明です。ときどきforループが正しい答えの人です、ごめんなさい。 –

答えて

5

私はtymeJVの答え基本的に

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

であれば問題ありません。回答! +1 – epascarello

+2

ハハ:)コーヒーはクッキーを手に入れないのが良い理由です! – axelduch

+0

2つの最後のパラメータ( 'index'、' array')がなぜ使われていないのか分かりません。誰かがこれを説明できますか? – MarksCode

5

私はあなたができるとします

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

'Map' ES6はありませんか?その場合、この解決策との互換性の問題があるかもしれません。 –

+0

map + reduce + concatは過剰なようです。もっと良くなる。 – James

+1

@EricHerlitz - '.map'はES5です。 – tymeJV

1

に似た何かを思い付いた:

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

これは私をWTFにしなかった唯一の答えです。それは退屈だが、その意図ははっきりしている。 –

1

少しスプライスしてください。

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

私は自分のアプリケーションでこの問題に出くわしたので、私は、この関数を作成する:配列、および回あなたの数を

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

それを使用するには、簡単なパス

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

これらのf ()、.concat()を参照するのに役立つことがあります。

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

質問が明確に記載されています**ご注文は重要** ** – Durga

+0

ありがとう@Davut .. sort()を追加するとこれが解決されます – tallgirltaadaa

関連する問題