2016-04-19 9 views
0

私は学校の割り当てがあり、インデックスの配列から何かを削除する際に問題があります。 これは私が現在持っているものです。Javascript delete loop

配列の長さを返す関数:オブジェクトを作成してからオブジェクトを削除するアレイ

function UstvariObjekt(ime,priimek, stranka) { 
    if (ime.length == 0 || priimek.length == 0 || stranka.length == 0) { 
     throw "Parametri niso popolni!"; 
    } 
    else { 
     var novaoseba=new oseba(ime, priimek, stranka); 
     polje.push(novaoseba); 
     console.log(novaoseba.ime, novaoseba.priimek, novaoseba.stranka); 
    } 
} 

関数にそれを押し込む

function DolzinaPolja(polje){ 
    return polje.length-1; 
} 

新しいコンストラクタ

function oseba(ime, priimek, stranka) { 
    this.ime=ime; 
    this.priimek=priimek; 
    this.stranka=stranka; 
} 

機能配列

function OdstraniIzPolja(x) { 
    if(x > polje.length - 1 || x == polje.length) { 
     throw"Polje ni tako veliko!"; 
    } 
    for(var i=0; i<=polje.length-1;i++) { 
     if(x==polje[i]) { 
      polje.splice(x,1); 
      return true; 
     } 
     return false; 
    } 
} 

アレイからオブジェクトを削除する際に問題が発生しています。 私のテストです。

var polje = []; 
var x=0; 

UstvariObjekt("Rene","Vucko","Stranka"); 
UstvariObjekt("R","V","S"); 
UstvariObjekt("X","Y","Z"); 

OdstraniIzPolja(x); 
console.log(polje[0]); 
console.log(polje[1]); 
console.log(polje[2]); 
console.log(DolzinaPolja(polje)); 

だから私の配列は2の長さでなければなりません.0,1,2から始めます。私が理解できないのは、配列からオブジェクトを削除する関数がオブジェクトを削除しないのはなぜですか?私はちょっと遊んだことがありますが、間違ったオブジェクトを削除することがよくあります。

xの長さが配列の長さよりも小さい場合は、xのif節も同じですか?

--- UPDATE ---- 私は polje.slice(2,1)をプログラムの中に関数なしで書くと、正しいものを削除します。だから明らかに何かがループに間違っています。 これは私の更新されたコードです。

function DolzinaPolja(polje){ 
    return polje.length-=1; 
} 

function OdstraniIzPolja(x) 
{ 
    if(x>polje.length-1 || x==polje.length) 
    { 
     throw"Polje ni tako veliko!"; 
    } 
    for(var i=polje.length-1;i>=0;i--) 
    { 
     if(x==polje[i]){ 
     polje.splice(i,1); 
     return true; 
     } 
     return false; 
    } 
} 

--EDIT-- ここhttps://jsfiddle.net/2y07wtkL/

+1

DolzinaPoljaが長さを返していない場合は、長さから1を引いた値が返されます。 –

+0

あなたの 'OdstraniIzPolja'関数で' x'はインデックスなので、適切な範囲に入っているかどうかチェックしています...ループは必要ありません。 –

+0

コンソールログ出力とは何ですか? – GracefulCode

答えて

1

オブジェクトを間違ったインデックスでスプライスするためです。 スプライスを使用する場合

polje.splice(x,1); 

xインデックスで要素を削除します。つまり、最初の要素を配列から削除すると、arrayの2番目の要素が最初になり、次の反復で削除する2番目の要素は削除されませんが、2番目の要素は代わりに削除されます(現在反復中の要素でなければなりません)。

+0

このビルドは...それが見えますそれは 'polje.splice(I、1)をやっていた、あなたが最初のインデックスiの値がxに等しいことを確認し'以来。 – fqhv

+0

は、私は、xと私を切り替えてみましたが、何も削除されません取得します:/ – ReneDrugiacc

+1

あなたがして、任意のループをしない(1)、pojle.indexOf(x)のpojle.spliceを使用して、配列から一つだけのエントリを削除する場合。 P0lip @ –

0

はあなただけな長さを引くあなたのソリューションのように

function DolzinaPolja(polje){ 
    return polje.length -= 1; 
} 

を試していますが、それ

+0

ウィルのおかげで、それはまだ右 – ReneDrugiacc

0

たびあなたをasignいけないコードですインデックスを持つコレクションから削除しているので、削除するたびにインデックスが変更されないようにする必要があります。私はそれが起こっていると思います。このような方向を変更してください

for(var i=polje.length-1;i>=0;i--) 
{ 
    ........ 
} 
+0

感謝を削除しませんが、それはうまくいきませんでした、何も削除されませしまっ:あなたが望むように、この上/ – ReneDrugiacc