2

Javaスクリプト配列オブジェクトがあり、そのオブジェクトの特定のインデックスからアイテムを削除したいのですが、そのインデックスのコンマ区切りの文字列があります。問題は、配列インデックスを使用して削除するとsplice変更され、他のインデックスのオブジェクトが削除されないことです。

    var DeletedConditions="3, 5, 19, 50";

    for (var k = 0; k < DeletedConditions.split(", ").length; k++) {
         ConditionObject.splice(DeletedConditions.split(", ")[k], 1);
    }

DeletedConditions文字列は何でもかまいません。

私を助けてください。これを行う方法。

4

6 に答える 6

1

ループ内でスプライシングした後は、いつでもkイテレータをデクリメントできます。

k--;
于 2012-11-06T05:25:27.710 に答える
1
var DeletedConditions="3, 5, 19, 50";
var list = DeletedConditions.split(", ")
for (var k = 0; k < list.length; k++) {
    // using splice here   
    list.splice(k,1); 
     k--;
}

console.log(list.join(', '))
于 2012-11-06T05:27:36.137 に答える
1

まず、正式にインデックスを正式な配列に変換することをお勧めします。インデックス参照として文字列を使用すると、分割を見逃しがちです。値がで区切られていない場合があります。,

次に、コード

var content = ['foo', 'bar', 'baz', 'bam', 'dom', 'zok'],
    deleteIndexes = [5, 1, 3],//should delete zok, bar, bam
    i;

//sort from least to greatest: [1, 3, 5]
deleteIndexes.sort(function(a, b) {
    return a - b;
});

//we loop backwards (performance enhancement)
//now we loop from greatest to least
//we now splice from greatest to least 
//to avoid altering the indexes of the content as we splice
for (i = deleteIndexes.length; i-- > 0;) {
    content.splice(deleteIndexes[i],1);
}

console.log(content); //["foo", "baz", "dom"] 

</ p>

于 2012-11-06T05:37:45.440 に答える
1

ご覧のとおり、配列の先頭から項目を削除すると、後の要素がシャッフルされ、インデックスが変更されます。ただし、アイテムのリストを逆方向に削除すると、最初に後の要素が削除されるため、配列の先頭に近い要素のインデックスは引き続き正しいものになります。

また、ループの反復ごとに操作を実行しないでください.split()。非効率性は、4つの数値を含む文字列ではあまり違いがない可能性がありますが、コードが煩雑になり、原則として厄介です。

var DeletedConditions="3, 5, 19, 50",
    delCondArr = DeletedConditions.split();

for (var k = delCondArr.length - 1; k >= 0; k--) {
     ConditionObject.splice(delCondArr[k], 1);
}

DeletedConditionsストライグが注文されない可能性がある場合は、.sort()分割した後にを追加するだけです。

delCondArr = DeletedConditions.split().sort(function(a,b){return a-b;});

...この場合、逆方向にループする必要はありません。

于 2012-11-06T05:38:24.690 に答える
1

プロセスで削除されたアイテムを省略して、元の配列をコピーするのが最も簡単な場合があります。このような何かがトリックを行うでしょう...

var DeletedConditions="3, 5, 19, 50";
DeletedConditions = DeletedConditions.split(', ');
var newConditionObject = [];
for(var k = 0; k < ConditionObject.length; ++k) {
  if(DeletedConditions.indexOf(k) !== -1) { continue; }
  newConditionObject.push(ConditionObject[k]);
}

// result is in `newConditionObject`
console.log(newConditionObject);
于 2012-11-06T05:42:20.867 に答える
-1
var fruits = new Array("apple", "banana", "grapes", "oranges","mosambi","aaa","bbb","ccc"); 

var DeletedConditions="1,3,4,5";

var indexArray = new Array;

indexArray = DeletedConditions.split(",");

for (var i = 0; i < indexArray.length; i++) {

   fruits.splice(indexArray[i], 1);
}
于 2012-11-06T05:37:24.773 に答える