javascript - 如何过滤深层嵌套数据?- Javascript JSON
问题描述
我需要在三个值之间过滤 JSON 数据,我得到了两个工作的值,即“时间戳”,它们不是嵌套/深的,但一个值是嵌套的,即“fromMe”。
我可以访问“时间戳”值,因为它没有嵌套,但我无法让它访问 lastMsg -> id -> fromMe。
Javascript代码
var filterMessages = chats_ativo.filter(function(x){
return x.timestamp >= variable1 && x.timestamp <= variable2; /* working */
return x.timestamp >= variable1 && x.timestamp <= variable2 && x.lastMsg.id.fromMe == false; /* not working */
});
JSON 数据 - 控制台日志(删除了一些个人信息)
"id": {
"server": "c.us",
"user": "phonenumber",
"_serialized": "phonenumber@c.us"
},
"name": "Name",
"isGroup": false,
"isReadOnly": false,
"unreadCount": 0,
"timestamp": 1596167676,
"archived": false,
"lastMsg": [
{
"id": {
"fromMe": false,
"remote": {
"server": "c.us",
"user": "phonenumber",
"_serialized": "phonenumber@c.us"
},
解决方案
这种方法应该有效,因为 lastMsg 属性是一个数组,我注意到我们还应该确保 lastMsg 存在并且访问的属性可用。
您还可以考虑查看 lodash get函数,这对于访问嵌套属性非常有用。
let chats_ativo = [{ "id": { "server": "c.us", "user": "phonenumber", "_serialized": "phonenumber@c.us" }, "name": "Name", "isGroup": false, "isReadOnly": false, "unreadCount": 0, "timestamp": 1596167676, "archived": false, "lastMsg": [ { "id": { "fromMe": false, "remote": { "server": "c.us", "user": "phonenumber", "_serialized": "phonenumber@c.us" } } }] }];
var variable1 = 1596167676;
var variable2 = 1596167676;
var filterMessages = chats_ativo.filter(function(x) {
return x.timestamp >= variable1 && x.timestamp <= variable2 && x.lastMsg[0].id.fromMe == false;
});
console.log("Filtered messages:", filterMessages);