2016-06-23 15 views
0

私のアプリケーションでは、チェックするときに配列にプッシュされる項目のリストがあります。チェックを外すと配列から削除されます。 は、ここでは、コード要素を削除した後に配列の並べ替え

  if (data.selectedInsertion === true) { 
       order.push(data); 
      } 
      else if (data.selectedInsertion === false) { 
       angular.forEach(order, function (value,key) { 
        if (value == data) { 
         delete order[key]; 
        } 
       }) 
      } 
ある

問題は、アレイ内の5番目の要素が削除された場合、配列は永遠にそのキーを欠けていることになると私はangularjsを使用してテンプレートに表示したときにそれが空白行が表示されますです場所または欠落している5番目の要素です。どのように要素を削除した後に配列を再配置できますか。

あなたはこのようにそれを行うことができ、あなたの配列内のすべての値が一意であると仮定すると
+3

スライスする必要があります。 http://www.w3schools.com/jsref/jsref_splice.asp –

+0

スプライス配列 – abhishekkannojia

+0

ここでは、オブジェクトと配列が混乱するかもしれません。 – CodeToad

答えて

0
if (data.selectedInsertion === true) { 
    order.push(data); 
} 
else if (data.selectedInsertion === false) { 
    order.splice(order.index(data),1); 
} 
+1

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。あなたのコードに説明的なコメントを詰め込まないようにしてください。これは、コードと説明の両方の可読性を低下させます! –

+0

はorder.indexOf(data)にする必要があります。 – Nivesh

0

if(data.selectedInsertion) { 
    order.push(data); 
} else { 
    order.splice(order.indexOf(data),1) 
} 

Array.spliceは、配列から要素を削除します。詳細については、このリンクをチェックし :dataがユニークではありません https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

場合は、配列の最初の出現が削除されます。

また、特にブール値と思われるので、truefalseの明示的なチェックを除外することができます。

0

配列から要素を削除するにはdeleteを使用しないでください。それはその要素の下に未定義のままの要素を削除します。したがって、スプライスまたはフィルタリングすることができます。

フィルタそれを:それは

if (data.selectedInsertion === true) { 
    order.push(data); 
} 
else if (data.selectedInsertion === false) { 
    order.splice(order.indexOf(data),1); 
} 

削除

if (data.selectedInsertion === true) { 
    order.push(data); 
} 
else if (data.selectedInsertion === false) { 
    order = order.filter(function(v){ 
    return v !== data; 
    }); 
} 

スプライスは、オブジェクトからプロパティを除去するために使用されます。

関連する問題