2016-09-29 12 views
2

基本的な質問.splice()方法と、要素を配列から削除するにはどうすればよいですか。配列から要素を削除する(スプライス)

私は.splice()で、配列から項目を削除したいが、私が行うとき、私は削除要素が返された元の配列マイナスを持っていると思います。 .splice()は、の要素を削除しましたを返します。

var arr = [1, 2, 3, 4, 5, 6, 7] 
var newArr = arr.splice(3, 1) 

console.log(newArr) // [4] 

// whereas I want [1, 2, 3, 5, 6, 7] 

これを行うには最高の、最も雄弁な方法はありますか?

+0

'arr'をログすると、そこから要素が削除されていることがわかります。それらは返され、splice関数によって 'newArr'に割り当てられました。 – gelliott181

答えて

3

.spliceは、配列を変更して、削除された要素を返します。だから、必要配列自体を返す関数あなたが実際にない限り、単にarrにアクセス:

var arr = [1, 2, 3, 4, 5, 6, 7] 
arr.splice(3, 1) 
console.log(arr) // [1, 2, 3, 5, 6, 7] 

あなたはスプライスを実行し、配列を返すラッパー関数を作成することができます。

function remove(arr, index) { 
    arr.splice(index, 1) 
    return arr; 
} 

var newArr = remove(arr, 3); 
// Note: `newArr` is not a new array, it has the same value as `arr` 

に新しい配列を作成したい場合は、元の配列を変更することなくY、あなたが.filterを使用することができます。

var newArr = arr.filter(function(element, index) { 
    return index !== 3; 
}); // [1, 2, 3, 5, 6, 7] 
arr; // [1, 2, 3, 4, 5, 6, 7] 
+0

'arr'は' array'更新されますか?なぜそれを使用していないのですか? – Rayon

+0

@レイヨン:OPに尋ねなさい;)しかし、ええ、多分彼らはそれについて知りませんでした。 –

+0

私はそれが最初に示唆していることだと思っています..もし彼が求めているのであれば、彼はそれがどういうかを知っているかも知れません... – Rayon

4

スプレッド演算子を使用して、あなたが行うことができます:

var arr = [1,2,3,4,5,6], 
    indexToRemove = 3, 
    newArr = [ 
     ...arr.slice(0,indexToRemove), 
     ...arr.slice(indexToRemove+1) 
    ] 

それとも、ES5を使用する場合、それはのようなものを見ることができます:

var arr = [1,2,3,4,5,6], 
    indexToRemove = 3, 
    newArr = [].concat(arr.slice(0,indexToRemove)).concat(arr.slice(indexToRemove+1)) 
+1

spread * operator *ではなく* spread要素*と呼ぶことができます。 MDNがそう言っても、それは演算子ではありません。 –

+0

これまでにこの方法を見てきました。この状況では少し冗長ですが、他の、おそらくより複雑なシナリオで役立つことに同意します。 – Paulos3000

+1

あなたが示唆しているのは、 '.filter'を使うだけです。これはコード量が少なく、不要な中間配列を生成しません:' newArr = arr.filter((_、i)=> i!== indexToRemove) ' –

関連する問題