繁体   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