代码之家  ›  专栏  ›  技术社区  ›  iggyweb

jQuery追加到嵌套数组

  •  0
  • iggyweb  · 技术社区  · 6 年前

    可以用吗 push 或者类似的方法,以JSON对象中的特定嵌套数组为目标?

    下面是一个JSON对象的示例:

    var json = [
            { "Id": 0, "Fruits": [{ "FruitId": 0, "Amount": null }] },
            { "Id": 1, "Fruits": [{ "FruitId": 2, "Amount": { "IsNull": false, "Value": 50.0000 } }, { "FruitId": 8, "Amount": { "IsNull":
    false, "Value": 700.0000 } }]}, 
            { "Id": 2, "Fruits": [{ "FruitId": 0, "Amount": null }] },
            { "Id": 3, "Fruits": [{ "FruitId": 0, "Amount": null }] }
        ];
    
    var output = JSON.stringify(json);
    
    var fruitsArray = $.parseJSON(output);
    

    我想插入 {"FruitId":8,"Amount":50} 在Id:2处变成水果

    从我见过的例子来看 它只是将一个对象推送到JSON对象的末尾,我希望能够在那里动态地追加。

    如有任何帮助,我们将不胜感激:-)

    3 回复  |  直到 6 年前
        1
  •  0
  •   Saurabh Yadav    6 年前

    首先必须找到索引,然后在该索引上插入数据。

       var json = [
                { "Id": 0, "Fruits": [{ "FruitId": 0, "Amount": null }] },
                { "Id": 1, "Fruits": [{ "FruitId": 2, "Amount": { "IsNull": false, "Value": 50.0000 } }, { "FruitId": 8, "Amount": { "IsNull": false, "Value": 700.0000 } }]}, 
                { "Id": 2, "Fruits": [{ "FruitId": 0, "Amount": null }] },
                { "Id": 3, "Fruits": [{ "FruitId": 0, "Amount": null }] }
            ];
    
    
        var indexNo = json.findIndex(function(obj) {
            return obj['Id'] == 2;
        });
        indexNo != -1 ? json[indexNo]['Fruits'].push({"FruitId":8,"Amount":5000}) : "Not found";
    

    --------------使用for循环查找索引-----------

    var json = [
                { "Id": 0, "Fruits": [{ "FruitId": 0, "Amount": null }] },
                { "Id": 1, "Fruits": [{ "FruitId": 2, "Amount": { "IsNull": false, "Value": 50.0000 } }, { "FruitId": 8, "Amount": { "IsNull": false, "Value": 700.0000 } }]}, 
                { "Id": 2, "Fruits": [{ "FruitId": 0, "Amount": null }] },
                { "Id": 3, "Fruits": [{ "FruitId": 0, "Amount": null }] }
            ];
    
    var indexNo = -1;
       for(var i = 0; i < json.length; i++) {
                if(json[i]['Id'] == 2) {
                    indexNo = i;
                    break;
                }
        }
        indexNo != -1 ? json[indexNo]['Fruits'].push({"FruitId":8,"Amount":5000}) : "Not found";
    
        2
  •  -1
  •   Ele    6 年前

    你可以使用函数 find 查找特定对象,然后将其添加到数组中。

    let array = [{    "Id": 0,    "Fruits": [{      "FruitId": 0,      "Amount": null    }]  },  {    "Id": 1,    "Fruits": [{      "FruitId": 2,      "Amount": {        "IsNull": false,        "Value": 50.0000      }    }, {      "FruitId": 8,      "Amount": {        "IsNull": false,        "Value": 700.0000      }    }]  },  {    "Id": 2,    "Fruits": [{      "FruitId": 0,      "Amount": null    }]  },  {    "Id": 3,    "Fruits": [{      "FruitId": 0,      "Amount": null    }]  }],
        targetId = 2,
        object = {"FruitId":8,"Amount":50},
        target = array.find(({Id}) => Id === targetId);
    
    if (target) target.Fruits = [...target.Fruits, object];
    
    console.log(array);
    .as-console-wrapper { max-height: 100% !important; top: 0; }
        3
  •  -1
  •   Landy    6 年前

    还有另一种方法:

     $.each(json,function(ix,record) {
               if(record.Id == 2)
                  {
                      record.Fruits.push({"FruitId":8,"Amount":50})
                   }
                   });