使用Javascript编辑对象项

时间:2012-04-21 16:12:43

标签: 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函数,因为该方法可以在数组中找到项目但是我无法弄清楚编辑索引中的项目的语法,并希望有人能指出我正确的方向。

3 个答案:

答案 0 :(得分:2)

你可以这样做,并有功能这样做..

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

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具有的快速索引搜索功能

希望它有所帮助。

答案 1 :(得分: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"中间调用拼接方法。函数,因为jQuery将尝试在数组中的一个已删除对象上运行该函数,该对象具有未定义的值。更好的方法是将要删除的项目的索引保存在变量中,然后在执行.each后运行splice函数。

答案 2 :(得分: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属性的对象的任何数组对象。