80

要素の配列があり、そこから特定のものを削除する必要があります。問題は、JavaScript に for each ループがないように見えることです。for ループを使用すると、基本的に配列の境界を超えた要素をチェックしようとしたり、インデックスが変更されたために配列内の要素が欠落したりするという問題が発生します。 . 私が何を意味するかをお見せしましょう:

var elements = [1, 5, 5, 3, 5, 2, 4];
for(var i = 0; i < elements.length; i++){
    if(elements[i] == 5){
        elements.splice(i, 1);
    }
}

問題は、要素[1]が削除されると、要素[2]が要素[1]になることです。したがって、最初の問題は、一部の要素がまったく検査されないことです。もう 1 つの問題は、.length が変更され、境界をハードコーディングすると、配列の境界を超えて要素を調べようとする可能性があることです。では、この信じられないほど単純なことを行う最善の方法は何でしょうか?

4

6 に答える 6

2

iアイテムを削除するたびに、単純に減らすことができます。

var elements = [1, 5, 5, 3, 5, 2, 4];

var l = elements.length;
for(var i = 0; i < l; i++){
    if(elements[i] == 5){
        elements.splice(i, 1);
        i--;
    }
}

console.log(elements);

于 2016-10-18T14:42:12.337 に答える
0

これは、Array.indexOfwhile、およびArray.spliceを使用して要素をインラインで削除する例です。

var elements = [1, 5, 5, 3, 5, 2, 4];
var remove = 5;
var index = elements.indexOf(remove);

while (index !== -1) {
    elements.splice(index, 1);
    index = elements.indexOf(remove);
}

console.log(elements);

jsfiddleについて

于 2013-05-03T06:12:54.093 に答える