2016-10-02 17 views
-4

配列があり、beginIndexからendIndexに参加し、残りの部分をそのまま残したい。例えば配列の一部を結合し、残りの部分をそのままJavascriptに残す

、私はこの配列があります。

['first', 'second', '<error>', 'Can not parse the third element', '</error>', 'fourth', 'fifth'] 

をそして私は私が得るように、インデックス4までのインデックス2からの要素をjoin('\n')たい:

['first', 'second', '<error>\nCan not parse the third element\n</error>', 'fourth', 'fifth'] 

任意の提案ですか?

編集:うわー、この無邪気なよく定式化された質問の4 downvotesと2近い票のおかげで、はい、私はループのために働いたものを持っていましたが、醜いと感じました。私はよりエレガントなものを探していました。私はスプライス方法について知らなかった。面白い答えのためにソビエトとニーナに感謝します。同じ質問の他の人も同様にそれから学ぶことができるといいですね...

+5

私の提案は次のようになります。「あなたの質問であなたの試みを投稿し、説明どこで、どのように彼らは失敗しました"あなたの試みは間違っていました、彼らは何をしてはいけないのですか、何をしてはいけないのですか?コンソール(ほとんどのブラウザではF12)にエラーがありましたか?あなたの "* [mcve] *"をあなたの質問に投稿してください。 –

+0

"2から4の要素のサブ配列を取得して結合し、元の要素2から4を1つの結果に置き換える"ことができます。だから、次のステップは、ドキュメントをヒットし、これを行う関数を見つけて、それを一緒に試みて解決しようとすることです。 – Jon

+0

@DavidThomas私の試みは、このページに終わる同じ質問の読者には騒音を与えるだけのように感じます。私はforループを使用していましたが、その後、reduceメソッドを少し試してみましたが、これもうまくいきましたが、私は考えられるほどエレガントではありませんでした。スプライス法についてはわかりませんでしたが、これはこれを解決する最もエレガントな方法です。 – Kasper

答えて

1

あなたはArray#splice

使用することができますsplice()方法は、既存の要素を削除、および/または新しい要素を追加することによって、配列の内容を変更します。

var array = ['first', 'second', '<error>', 'Can not parse the third element', '</error>', 'fourth', 'fifth'], 
 
    beginIndex =2, 
 
    endIndex = 4; 
 

 
array.splice(beginIndex, 0, array.splice(beginIndex, endIndex - beginIndex + 1).join('\n')); 
 

 
console.log(array);

1

sliceを使用して配列のサブセットを取得し、結合してからspliceの値を配列に戻すことができます。スプライシングでは、挿入している間も要素を削除/置換できます。

var logs = ['first', 'second', '<error>', 'Can not parse the third element', '</error>', 'fourth', 'fifth']; 
 

 
var startIndex = 2; 
 
var endIndex = 5; 
 

 
var slicedTokens = logs.slice(startIndex, 5); 
 
var joinedString = slicedTokens.join(''); 
 
var deleteCount = endIndex - startIndex; 
 

 
logs.splice(startIndex, deleteCount, joinedString); 
 

 
console.log(logs);

1

これを行うための簡単な方法になります: -

var a = ['first', 'second', '<error>', 'Can not parse the third element', '</error>', 'fourth', 'fifth']; 

var b = []; 
var startJoinIndex = 2; 
var endJoinIndex = 4; 
var joinedValue = ""; 
a.forEach(function(item, index){ 
    if (index >= startJoinIndex && index <= endJoinIndex){ 
    joinedValue += item; 
    if (index === endJoinIndex){ 
     b.push(joinedValue); 
    } 
    } else { 
    b.push(item); 
    } 
}); 

console.log(b); 
関連する問題