使用Grep基于grep或delete函数从JSON对象创建新的JSON对象

时间:2016-01-13 14:23:50

标签: jquery json

给出以下JSON对象

var data = {
    "ok" : true,
    "messages" : [
        {
            "type" : "message",
            "subtype" : "bot_remove"
        },
        {
            "type":"message",
            "subtype":"file_share",
            "file" : {
                "name" : "file_name"
            },
        }    
    ],
    "has_more" : false
}

使用jQuery我想创建一个只包含值为"file_share"的对象的新JSON对象。我只是不确定我是否应该使用$.grep或javascript的删除

类似

var newObject = [];
var result = $.grep(data.messages , function(key,value){
    return +key.subtype !== "file_share";
    newObject.push(result)
}); 

或使用$.grep过滤长度大于0的对象(因为第二个对象包含子对象)。

那么我是否必须stringify和/或$.parseJSON() newObject

2 个答案:

答案 0 :(得分:1)

您应该使用Array.prototype.filter

var result = data.messages.filter(function(obj) {
    return obj.subtype === 'file_share';
});

if (result.length) {
    // item found, use `result[0]` to access it
}

答案 1 :(得分:1)

你应该仔细看看JQuery grep如何在这里工作:http://api.jquery.com/jquery.grep/

用法应如下所示:

var result = $.grep(data.messages, function(message){
    return message.subtype == 'file_share';
});

这将返回您想要过滤的邮件副本。但是返回的对象不是Deep Copies,因此更改它们将改变原始对象。

您可以在此处查看如何创建结果的深层副本:What is the most efficient way to deep clone an object in JavaScript?