给出以下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
?
答案 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?