繁体   English   中英

如何通过使用jquery将元素添加到json的一部分

[英]How can I add elements to a part of a json by using jquery

我尝试将元素以特定的方式添加到以下JSON:

var data = [{"name":"google",
             "ip":"10.10.10.01",
             "markets":[{"name":"spain","county":"6002,6017,6018,6019,6020"},
                        {"name":"france","county":"6003,6005,6006,6007,6008,6025,6026,6027,6028,6029"},
                        {"name":"japan","county":"6004,6021,6022,6023,6024"},
                        {"name":"korea","county":"6000,6013,6014,6015,6016"},
                        {"name":"vietnam","county":"6001,6009,6010,6011,6012"}]},
            {"name":"amazon",
             "ip":"10.10.10.02",
             "markets":[{"name":"usa","county":"10000,10001,10002,10003,10004,10005"}]},
            {"name":"yahoo",
             "ip":"10.10.10.03",
             "markets":[{"name":"japan","county":"10000"}]}];

我想将此元素添加到json:

newData = [{"name":"amazon",
            "ip":"10.10.10.02",
            "markets":[{"name":"mexico","county":"9000"}]}];

结果可能就是这样:

var data = [{"name":"google",
             "ip":"10.10.10.01",
             "markets":[{"name":"spain","county":"6002,6017,6018,6019,6020"},
                        {"name":"france","county":"6003,6005,6006,6007,6008,6025,6026,6027,6028,6029"},
                        {"name":"japan","county":"6004,6021,6022,6023,6024"},
                        {"name":"korea","county":"6000,6013,6014,6015,6016"},
                    {"name":"vietnam","county":"6001,6009,6010,6011,6012"}]},
            {"name":"amazon",
             "ip":"10.10.10.02",
             "markets":[{"name":"usa","county":"10000,10001,10002,10003,10004,10005"},
                        {"name":"mexico","county":"9000"}]},
            {"name":"yahoo",
             "ip":"10.10.10.03",
             "markets":[{"name":"japan","county":"10000"}]}];

我尝试使用:

$.extend(data.markets, newData)

$.extend(true, data, newData); //这仅在每个元素都是新元素的情况下才有效。

但没有什么能像我一样假装。

谁能给我解决方案?

提前致谢。

您有一个对象数组,其中每个对象如下所示:

var item = {"name":"...",
            "ip":"...",
            "markets":[ /*some objects here*/];
}

那么,为什么不创建您的自定义方法来插入元素呢? 它可以在数组中搜索是否存在具有相同名称和ip的项目,然后:

  • 如果存在,请执行以下操作:将市场追加到现有的商品市场属性中(也许您需要再次检查它们是否已经存在)。 更新 :@jasonscript在他的答案中添加的代码将完成此工作:一旦找到要添加市场的位置,只需将其添加到数组中即可。 同样,也许您必须检查该市场是否已经存在。 使用jQuery,它将是: $.extend(true, data[i],newData)
  • 如果不存在:只需将项目添加到数组中: $.extend(true, data,newData)

您尚未创建JSON,尚未创建JavaScript文字对象。

您可以通过以下方式添加特定的新数据

data[1].markets.push({"name":"mexico","county":"9000"})

因为您正在处理javascript对象,所以可以编写一个函数来检查data [n]是否存在并push数据。

另一个答案中窃取一些代码:

$.each(data, function(item){
    if(item.name == newData[0].name && item.ip == newData[0].ip) {
        item.markets.push.apply(item.markets, newData[0].markets);
    }
}

假设您知道新对象中的所有市场项目都与现有市场项目不同-否则,您必须进行嵌套的foreach或其他操作。 如果您可以稍微更改对象的表示法,则可以考虑为Markets使用类似字典的对象以使其更加整洁。

实际上,从关联数组更改data也可能适用。 然后,您可以轻松地通过以下方法检查是否存在:

if(data[myNewDataName]){
    //add to markets
} else {
    data[myNewDataName] = myNewData;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM