2017-12-22 20 views
0

Iが色名の配列を有する:繰り返し文字列をインデックスから配列から削除する方法はありますか?

var colors = ["yellow","yellow","yellow","orange","orange","blue","blue","blue","blue]; 

とインデックスを持つ配列:

var indexes = [2, 3]; 

Iは、インデックスによって与えられた位置に色の名前を削除したい - この例では第三の "黄色 "と最初の"オレンジ "。

for (var i = colors.length - 1; i >= 0; i--) { 
    for (var j = 0; j < indexes.length; j++) { 
     if (colors.indexOf(colors[i]) == indexes[l]) { 
      colors.splice(k, 1); 
     } 
    } 
} 

トラブルがcolors.indexOf(色[i]が)全繰り返し色名に同じ値を与えることである:私はこのようなループを試みました。より良い方法がありますか?

+0

だから、2は黄色で、3はオレンジ色であるので、あなたはすべての黄色とオレンジを削除したいですか? – Archer

+0

なぜあなたはインデックスをお探しですか?あなたはインデックスの配列を持っているので、私は本当に混乱していますか? – zfrisch

+0

私はテトリスゲームを構築しようとしています。私は数多くの四角形の配列を持っています。私は完全な行の四角形を削除しようとしています。次に、別の配列の同じインデックスの色を色で削除します。インデックスは完全な行を探している別の関数からのものです。 –

答えて

-1

試してみてください。

var colors = ["yellow","yellow","yellow","orange","orange","blue","blue","blue","blue"]; 
var newcolors=[]; 
colors.forEach(function(item) { 
    if(newcolors.indexOf(item)==-1) 
    { 
     newcolors.push(item); 
    } 
}) 
colors = newcolors; 
+0

配列自体を実行し、配列内で繰り返す要素をスプライスすることもできます。これを行う方法は非常に効率的ですが、ここではただ一つです – dGRAMOP

+0

問題なし:) Upvote = <3 – dGRAMOP

0
for (var i = indexes.length-1; i >= 0; i--) 
    colors.splice(indexes[i], 1); 

もちろん、インデックスには要素インデックスが増えています。そうでない場合は、まずソートしてください。

編集:コメントを読みましたあなたは2,3位の名前を持つすべての色を削除したいと思ったのかもしれません。これを明確にするために、位置2,3の要素とそれらの要素だけを削除します。新しい配列を作成

+0

ありがとうございます。私は位置2と3の要素を削除したいだけです。私はテトリスのゲームを構築しようとしています。私は数多くの四角形の配列を持っています。私は完全な行の四角形を削除しようとしています。次に、別の配列の同じインデックスの色を色で削除します。 –

0

あなたは端からループやアイテムをスプライスことができます。これにより、アレイの長さが短くなります。

スプライシング後の次のインデックスが実際のインデックスであるため、最初からループすることはできません。

var colors = ["yellow0", "yellow1", "yellow2", "orange0", "orange1", "blue0", "blue1", "blue2", "blue3"], 
 
    indexes = [2, 3], 
 
    i = indexes.length; 
 
    
 
while (i--) { 
 
    colors.splice(indexes[i], 1); 
 
} 
 

 
console.log(colors);

2

あなたは私の提案は、最初のインデックス配列をループではなく、色になりfilterincludes機能

colors = colors.filter((e, i) => !indexes.includes(i)); 
0

を使用することができます。そうすれば、最初に削除したい色を得ることができます。次に、その色のすべてのインスタンスを削除するのが最も良いと思われる方法を使用できます。この例では、Array#Filterと、配列の色がインデックスから得られた色と一致するかどうかをチェックする関数を使用しました。

forループも使用できました。

var colors =["yellow","yellow","yellow","orange","orange","blue","blue","blue","blue"] 
 

 

 
var indexes = [2, 3]; 
 

 
for(let i = 0; i < indexes.length; i++){ 
 
    let color = colors[indexes[i]]; 
 
    colors = colors.filter(c=>c!=color) 
 
} 
 

 
console.log(colors)

関連する問題