首页 > 解决方案 > 如何过滤深层嵌套数据?- 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"
     },

标签: javascriptarraysjsonobjectnested

解决方案


这种方法应该有效,因为 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);


推荐阅读