私のアプリケーションでは、ユーザーが行を追加したり削除したりする機能を作成しました(PHPとJS)。javascriptで配列に値を追加/削除する
私の機能の外に私の項目の配列を宣言しました。私が持っている問題は、行を削除すると、番号が配列に追加されなくなったときです。私は、関数の外にある配列に戻ってアイテムを追加するためにプッシュを()を使用していますが、それは動作していない
var maxField = 10
var x = 0;
var idArray = [];
for (var i = 1; i <= maxField; i++) {
idArray.push(i);
}
// sort the array as number, not as a string
idArray = idArray.sort(function(a,b) {
return (+a) - (+b);
});
$('#addItem').click(function() {
x = idArray.shift(); // get the next available id in the idArray for the record
if(x <= maxField) {
// do something
}
});
$('#removeItem').on('click', '.remove_button', function(e) {
var removeButtonId = this.id,
splitRemoveButtonId = removeButtonId.split('_');
x = splitRemoveButtonId[2];
// get the value of x and put it back in the idArray, sort the array and be ready for the next record
idArray.push(x);
idArray = idArray.sort(function(a,b) {
return (+a) - (+b);
});
alert(x +' - '+ idArray);
e.preventDefault();
});
:
は、ここに私のコードです。私もconcat()を試みましたが、うまくいきませんでした。行/項目は削除されますが、その行の値xは配列に戻されません。
どのような考えですか?ありがとう。
UPDATE:興味深いことに
すべてが正常に動作する、以下のように私は、配列を埋める場合。
idArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
問題は、アレイを埋めるためにforループに関連していると思われる - または - removeItem関数内のコードが配列を更新していません。解決しよう
for (var i = 1; i <= maxField; i++) {
idArray.push(i);
}
:
これを解決するために私にしばらく時間がかかったシンプルな問題でした。削除ボタンがクリックされたときにxが配列に戻されると、二重引用符で囲まれた文字列として追加されました。以下を追加することで問題が解決しました。
idArray = idArray.map(Number);
単項プラスの必要がない、マイナス数値に文字列を強制します。 sortはin-situで動作するため、ソートされた配列の代入は不必要です。 –
それはIDを作成するための複雑なシステムです!なぜあなたはそれらを必要としますか? – James
質問の引用符を修正してください。 '$( '#addItem')'に中括引用符があり、 '$( '#removeItem)に中括引用符と欠落引用符があります。 – Barmar