操作JSON对象:如何引用和更新嵌套值

时间:2013-07-05 12:40:04

标签: javascript jquery json

我刚刚开始这样做,所以我对如何使用以下内容感到困惑。

// so I believe this really isn't an object just a string representation, but for example please excuse the name
var dataObj = "{'id': 1, 
                'data': { 'color': 'red', 
                          'shape' : 'triangle', 
                          'height' : 100, 
                          'width' : 45, 
                           },
                'id': 2, 
                'data': { 'color': 'blue', 
                          'shape' : 'square', 
                          'height' : 75, 
                          'width' : 67, 
                          },
                'id': 3, 
                'data': { 'color': 'orange', 
                          'shape' : 'circle', 
                          'height' : 89, 
                          'width' :24, 
                          }
                }";

所以我遇到的问题是如何通过id更新数据值的特定子集(如SQL UPDATE WHERE类似的东西)? javascript或jquery对我来说无关紧要,只是不知道两种方法。

dataObjUpdate(2);    
function dataObjUpdate (passedID) {

    //access the data by the passedID match and update the color to black
}

感谢帮助人....

1 个答案:

答案 0 :(得分:2)

如果我们忽略我留下的评论并假设你有一个JavaScript对象。我看到以下问题:

  • 您的ID在嵌套对象之外。
  • 你正在使用一个对象,但你想要一个'列表',你可以使用一个数组。

以下是我自己构建对象的方法:

var data = [{ 
        color : 'red', 
        shape : 'triangle', 
        height : 100, 
        width : 45, 
        id:1
    },
    { 
        color: 'blue', 
        shape : 'square', 
        height : 75, 
        width : 67, 
        id: 2
    },
    {
        color: 'orange', 
        shape : 'circle', 
        height : 89, 
        width :24,
        id :3 
    }];

现在,我可以像使用filter一样查询它:

var id3 = data.filter(function(elem){
             return elem.id === 3;
          })[0];
   id3;//the third object, with id 3

ES6有一个名为find的方法,可以在最后保存[0](这意味着第一个元素)

var id3 = data.find(function(elem){
             return elem.id === 3;
          });
   id3;//the third object, with id 3

或者,您可以使用简单的for循环

var id3 = (function find(arr){
              for(var i=0;i<arr.length;i++){
                  if(arr[i].id === 3){
                      return arr[i];
                  }
              }
          })(data);
id3;