2

ID に基づいて配列内のデータを編集しようとしています。これが私の配列です:

var myCollection = {
"data": [
{ "id":"1", "Name":"John Smiths", "AMT_STD":"1.99"},
{ "id":"2", "Name":"Carlsberg", "AMT_STD":"1.99"},
{ "id":"3", "Name":"Samuel Adams", "AMT_STD":"1.99"}
  ]};

私ができるようにしたいのは、配列内で id=1 を見つけて AMT_STD の値を 1.00 に更新できる関数を作成することです。

他の質問を見て、配列にアイテムを追加して削除することができましたが、アイテムを見つけて編集する方法をまだ理解していません。

以下のコードを使用して項目を追加します。

function Add_Item() {
myCollection.data.push( { "id":"4", "Name":"Fosters", "AMT_STD":"1.99" } );
}

以下のコードを使用してアイテムを削除します。

function findAndRemove(array, property, value) {
$.each(array, function(index, result) {
if(result[property] == value) {
array.splice(index, 1);
}    
});

findAndRemove(myCollection.data, 'id', '1'); によって呼び出されます。

findAndRemove 関数は配列内のアイテムを見つけることができるため、編集しようとしましたが、インデックス内のアイテムを編集するための構文がわかりません。誰かが私を正しい方向に向けてくれることを望んでいました。

4

3 に答える 3

3

あなたはそのように行くことができ、そうするための機能を持つことができます。

ただし、それでも形式を変更できる場合は、

var myCollection = {
  data: {
    1:{Name:"John Smiths", "AMT_STD":"1.99"},
    2:{Name:"Carlsberg", "AMT_STD":"1.99"},
    3:{Name:"Samuel Adams", "AMT_STD":"1.99"}
  }
}

挿入またはレコードの更新は、次のように実行できます。

myCollection.data[4]={Name:"Fosters", "AMT_STD":"1.99" }

値の更新:

myCollection.data[2]["AMT_STD"]="2.00"

データの取得

myCollection.data[1];//the full record
myCollection.data[1].Name;//just the name
myCollection.data[1]["AMT_STD"];//similar to the previous but can use more complex keys/names

レコードを削除する

delete myCollection.data[2];

このように、挿入、検索、または削除するコードは必要ありません(javascriptオブジェクトの組み込み機能を使用)。文字列をIDとして使用でき(数値に制限されません)、JavaScriptが持つ高速インデックス検索を利用できます。

それが役に立てば幸い。

于 2012-04-21T16:42:56.480 に答える
1

他の回答には適切なガイドラインがあります。ただし、実際に findAndRemove 関数と同様に実行したい場合最も類似した方法は、次のように関数 findAndReplace を作成することです。これは、一致が見つかったときに更新されるプロパティを追加の引数として受け取ります (この場合は「AMT_STD」)。そしてそれが更新されるべき値(あなたの場合は1.00):

   function findAndReplace(array, property, value, replaceProperty, replaceValue) {
    $.each(array, function(index, result) {
        if (result[property] == value) {
            result[replaceProperty] = replaceValue;
        }
    });
   } 

次のように呼び出します。

findAndReplace(myCollection.data, 'id', '1', 'AMT_STD', 1.00);

追加の補足として、質問にある findAndRemove 関数は、実際には一部のブラウザーで JavaScript エラーを引き起こします。「.each」関数の途中で splice メソッドを呼び出すことはできません。これは、jQuery が配列内の削除されたオブジェクトの 1 つに対して関数を実行しようとするためで、そのオブジェクトには未定義の値が含まれます。より良い方法は、削除する項目のインデックスを変数に保存し、.each を実行した後に splice 関数を実行することです。

于 2012-04-21T17:00:26.673 に答える
0

このプロトタイプメソッドはどうですか?

Array.prototype.updateById = function(id, key, val) {
  // Loop the array - this refers to the array in this context
  for (var i = 0; i < this.length; i++) {
    if (this[i].id == id) {
      this[i][key] = val;
      return true;
    }
  }
  return false;
};

// Use it like this:
var updateSuccess = myCollection.data.updateById(1, "AMT_STD", "1.00");

// updateSuccess is now a boolean indicating whether the object was found and updated

プロトタイプを作成することにより、プロパティを持つオブジェクトを含む任意の配列オブジェクトでメソッドを使用できidます。

于 2012-04-21T16:21:12.833 に答える