簡體   English   中英

使用Javascript編輯對象項

[英]Edit Object Item with Javascript

我正在嘗試根據其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函數,因為該方法可以找到數組中的項目但是我無法弄清楚編輯索引中的項目的語法,並希望有人可以指出我正確的方向。

你可以這樣做,並有一個功能這樣做..

但如果您仍然可以更改格式,請考慮使用

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對象內置的habilities)。 您可以使用字符串作為ID(不限於數字),並且您可以獲得javascript具有的快速索引搜索功能

希望能幫助到你。

其他答案中有很好的指導方針。 但是,如果你真的想要這樣做與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將嘗試在數組中的一個已刪除對象上運行該函數,然后該對象具有未定義的值。 更好的方法是將要刪除的項目的索引保存在變量中,然后在執行.each后運行splice函數。

這個原型方法怎么樣?

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屬性的對象的任何數組對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM