【问题标题】:Delete duplicate object(JSON) nodes - JavaScript删除重复的对象(JSON)节点 - JavaScript
【发布时间】:2018-11-19 06:22:59
【问题描述】:

我有一个 JSON 字符串:

var jsn = '{"header-v1":{"archives":{"is_author":"all"}},"header-v4":{"archives":{"is_author":"all"}}}';

此对象不断更新,我想删除重复值。例如,如果是:

    var jsn = '{"header-v4":{"archives":{"is_author":"all"}}}';

如果应该添加的新规则集等于

"header-v1":{"archives":{"is_author":"all"}}

然后我想从那里删除"header-v4":{"archives":{"is_author":"all"}},因为有一个重复的{"archives":{"is_author":"all"}}

这甚至可以用 JavaScript 实现吗?

【问题讨论】:

    标签: javascript json object


    【解决方案1】:
    var result = [];
    $.each(subservices, function (i, e) {
        var matchingItems = $.grep(result, function (item) {
           return item.name === e.name && item.label === e.label;
        });
        if (matchingItems.length === 0){
            result.push(e);
        }
    });
    
    //displays result [{"name":"hello","label":"world"},{"name":"abc","label":"xyz"}]
    alert(JSON.stringify(result));
    

    JS 提琴手 http://jsfiddle.net/defujjhp/

    【讨论】:

    • 不,即使这样也行不通。请查看我对@Manish 帖子的评论。
    【解决方案2】:

    也许你可以这样做

    var jsn = '{"header-v4":{"archives":{"is_author":"all"}}}';
    
    var jsonObject = JSON.parse(jsn);
    
    var newJsn = '{header-v1":{"archives":{"is_author":"all"}}}';
    
    var newJsonObject = JSON.parse(newJsn);
    
    var matchingKey = [];
    
    Object.keys(newJsonObject).forEach(key => {
        Object.keys(jsonObject).forEach(nkey => {
            if(newJsonObject[key].toString() === jsonObject[nkey].toString()) {
              matchingKey.push(nkey);
            }
        });
    });
    
    matchingKey.forEach(mkey => {
        delete jsonObject[mkey];
    });
    

    【讨论】:

    • 谢谢,但如果初始对象 jsonObject 包含多个对象,您的代码将删除所有这些对象。我只需要从初始 JSON 中删除一个新对象的副本,然后将新对象插入它的位置。简而言之,我想用新值替换旧(重复)值。这是一个 JSBin 示例:jsbin.com/gekagavabe/edit?js,console
    • 你能检查一下你是否需要这个jsbin.com/hopefenapu/edit?js,console
    • 感谢您的努力,但这仍然不是我想要的。您的脚本删除了所有内容,只是在 JSON 中添加了一个新字符串 {"header-v1":{"archives":{"is_author":"all"}}}。添加{"header-v1":{"archives":{"is_author":"all"}}} 时,我只想从那里删除"header-v4":{"archives":{"is_author":"all"}}},因为它是新值的副本。现在清楚了吗?
    • 你想只删除最后一个对象吗?因为"header-v3":{"archives":{"is_search":"all"}} 也重复了新值所以我从对象中删除了所有重复值
    • 不,它不是重复的。 "is_search""is_author" 不一样。
    猜你喜欢
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2016-05-13
    • 2017-02-03
    相关资源
    最近更新 更多