在 JavaScript 中分析 JSON 数据

2024-01-07

我并不是说这是一个完全聪明的想法(我认为,理想情况下,大量数据的计算应该在后端完成),但请幽默一下。

我正在尝试从 JSON 源中提取视图数据并进行一些分析。给定以下数据源:

[
    {
        "group": "satellite-1",
        "data": [
            {
                "label": "feed-1a",
                "data": [
                    {"timeRange": [800, 820], "val": "TargetC"},
                    {"timeRange": [800, 820], "val": "TargetD"},
                    {"timeRange": [820, 840], "val": "TargetA"},
                    {"timeRange": [820, 840], "val": "TargetC"},
                    {"timeRange": [820, 840], "val": "TargetD"},
                    {"timeRange": [820, 840], "val": "TargetB"}
                ]
            },
            {
                "label": "feed-2a",
                "data": [
                    {"timeRange": [780, 800], "val": "TargetB"}
                ]
            }

        ]
    },
    {
        "group": "satellite-4",
        "data": [
            {
                "label": "feed-1b",
                "data": [
                    {"timeRange": [780, 800], "val": "TargetA"},
                    {"timeRange": [800, 820], "val": "TargetB"},
                    {"timeRange": [800, 820], "val": "TargetC"}
                ]
            },
            {
                "label": "feed-2b",
                "data": [
                    {"timeRange": [780, 800], "val": "TargetB"}
                ]
            }

        ]
    }
]

我想确定:

  1. 卫星数量
  2. 卫星馈送数量
  3. 最容易观察的 Feed(即哪个 Feed 具有最多的目标)

但是,我没有得到我想要的结果。我认为我的循环没有按预期工作(请参阅评论):

var dataSet_initial = [
{
    "group": "satellite-1",
    "data": [
        {
            "label": "feed-1a",
            "data": [
                {"timeRange": [800, 820], "val": "TargetC"},
                {"timeRange": [800, 820], "val": "TargetD"},
                {"timeRange": [820, 840], "val": "TargetA"},
                {"timeRange": [820, 840], "val": "TargetC"},
                {"timeRange": [820, 840], "val": "TargetD"},
                {"timeRange": [820, 840], "val": "TargetB"}
            ]
        },
        {
            "label": "feed-2a",
            "data": [
                {"timeRange": [780, 800], "val": "TargetB"}
            ]
        }

    ]
},
{
    "group": "satellite-4",
    "data": [
        {
            "label": "feed-1b",
            "data": [
                {"timeRange": [780, 800], "val": "TargetA"},
                {"timeRange": [800, 820], "val": "TargetB"},
                {"timeRange": [800, 820], "val": "TargetC"}
            ]
        },
        {
            "label": "feed-2b",
            "data": [
                {"timeRange": [780, 800], "val": "TargetB"}
            ]
        }

    ]
}
];

/*
 * Prep Data
 */
var dataSet_stringify = JSON.stringify(dataSet_initial); // strigify JSON to parse it
var dataSet_parsed = JSON.parse(dataSet_stringify); // parse JSON

/*
 * # Satellites
 */
var getNumberofSatellites = dataSet_parsed.length; //2
console.log("Number of Satellites: " + getNumberofSatellites);

/*
 * # Feeds
 */
var getGroupList = function(){
    var i, j;

    for (i = 0; i < dataSet_parsed.length; i++) {
        for (j = 0; i < dataSet_parsed[i].data.length; j++){
            return dataSet_parsed[i].data[j].label;
        }
    }
}; //returns only the first feed, not looping through
console.log("Feeds: " + getGroupList());

/*
 * # of Feed Data Feeds
 */
var getMostObservantFeed = function(){
    var i, j;

    for (i = 0; i < dataSet_parsed.length; i++) {
        for (j = 0; i < dataSet_parsed[i].data[j].data.length; j++){
            return dataSet_parsed[i].data[j].data.length;
        }
    }
}; //again not looping through

console.log("Individual Feed Data Feeds: " + getMostObservantFeed());

好吧,通过使用一些数组魔法,我自己做了一个版本:

  const satellitesData = getSatellitesData();
  const feeds = [].concat.apply([], satellitesData.map(s => s.data));

  // Extracting what you want...
  const satellitesCount = satellitesData.length;
  const feedsCount = feeds.length;
  const mostObservantFeed = feeds.reduce((a, b) => (a.data.length > b.data.length) ? a : b);

  console.table([{ 
    'Satellites count': satellitesCount, 
    'Feeds count': feedsCount,
    'Most observant feed': mostObservantFeed.label
  }]);


  // Your data, which will be retrieved from somewhere...
  function getSatellitesData() {
    return [
      {
        group: 'satellite-1',
        data: [
          {
            label: 'feed-1a',
            data: [
              {
                timeRange: [800, 820],
                val: 'TargetC'
              },
              {
                timeRange: [800, 820],
                val: 'TargetD'
              },
              {
                timeRange: [820, 840],
                val: 'TargetA'
              },
              {
                timeRange: [820, 840],
                val: 'TargetC'
              },
              {
                timeRange: [820, 840],
                val: 'TargetD'
              },
              {
                timeRange: [820, 840],
                val: 'TargetB'
              }
            ]
          },
          {
            label: 'feed-2a',
            data: [
              {
              timeRange: [780, 800],
              val: 'TargetB'
            }]
          }

        ]
      },
      {
        group: 'satellite-4',
        data: [
          {
            label: 'feed-1b',
            data: [
              {
                timeRange: [780, 800],
                val: 'TargetA'
              },
              {
                timeRange: [800, 820],
                val: 'TargetB'
              },
              {
                timeRange: [800, 820],
                val: 'TargetC'
              }
            ]
          },
          {
            label: 'feed-2b',
            data: [
              {
              timeRange: [780, 800],
              val: 'TargetB'
            }]
          }

        ]
      }
    ];
  }

评论版

// For the sake of clarity, I just extracted the example data to 
// a separate function...
const satellitesData = getSatellitesData();

/*
As the items of the original satellitesData array were objects, I needed to 
simplify them, by making a `map` first. So, instead of an array of objects 
whose items had an array property each one ("data"), after doing the map, 
I'll have simply an array of arrays.
To make it even simpler, I use `[].concat.apply([], someArrayHere)` 
to flatten our bidimensional array. 
In the end, by using this trick, I create a flat array of feeds.
*/
const feeds = [].concat.apply([], satellitesData.map(s => s.data));


const satellitesCount = satellitesData.length;

// As I have an array of feeds above, it's just a question of getting 
// the array length in order to find the feeds count
const feedsCount = feeds.length;

// Now I'm using reduce to iterate over the feeds. In each iteration, 
// I'm comparing the targets count, to find the feed with more targets. 
// At the end, the reduce will return the most observant feed.
const mostObservantFeed = feeds.reduce((a, b) => (a.data.length > b.data.length) ? a : b);

// To finish, console.table is just a fancy way of showing the data in the console. =)
console.table([{ 
  'Satellites count': satellitesCount, 
  'Feeds count': feedsCount,
  'Most observant feed': mostObservantFeed.label
}]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中分析 JSON 数据 的相关文章

  • 在节点环境中存根 jQuery.ajax (jQuery 2.x)

    我正在尝试运行一些需要存根的测试jQuery ajax 我正在使用 SinonJS 来做到这一点 它曾经与旧版本的 jQuery 1 x 一起工作得很好 var require jquery var sinon require sinon
  • 在上传之前预览图像 VUEjs [重复]

    这个问题在这里已经有答案了 我知道这个问题已经被问过 但我不知道如何在vuejs中使用代码 我尝试了很多但没有任何结果 我还添加了我的代码 有人可以帮帮我吗 这是我的代码 谢谢 html
  • jQuery:查找具有特定自定义属性的元素

    我只想找到具有特定自定义属性值的元素 例如 我想找一个div其具有属性data divNumber 6 var number 6 var myDiv data divNumber number 我尝试使用http api jquery co
  • 如何将 Ajax.BeginForm MVC 助手与 JSON 结果一起使用?

    我正在尝试使用 ASP NET MVC Ajax BeginForm 帮助程序 但不想在调用完成时使用现有的内容插入选项 相反 我想使用自定义 JavaScript 函数作为回调 这可行 但我想要的结果应该以 JSON 形式返回 不幸的是
  • 更新存储在 chrome 扩展本地存储中的对象

    我正在开发一个 chrome 扩展 我将存储服务器发送的对象 例如 我将收到 命令 id 1 类型 A 大小 B 优先级 C 如果我有一个数据库 我会将其作为表中的一行插入commands 使用 chrome storage 我将这些对象的
  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • 使用 jQuery inputmask 插件范围 0-100

    如何创建 0 到 100 范围内的掩码 document ready function masked inputmask 您可以使用jquery inputmask regex extensions js为了那个原因 你可以找到带有所有扩展
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • 如何显示接下来的三个图像单击加载更多按钮

    我需要一个加载更多按钮来显示图像 页面加载时 我显示 3 个图像 单击 加载更多 按钮后 接下来的 3 个图像将显示在屏幕上 我尝试了下面的代码 但它不起作用 你能帮我解决这个问题吗 function item slice 0 2 show
  • Firefox Addon 中的 JQuery 导致多个警告

    我在 Firefox 插件中使用 jquery 但我不断收到大量警告消息 如下所示 anonymous function does not always return a value System JS WARNING resource g
  • 如何在React中动态分配属性?

    这是一个有两个参数的函数 我要创建的标签的名称 具有以下属性的对象 Using React 我创建一个组件并将该元素渲染到 DOM 问题是我想向元素添加属性 但它不允许循环在元素内设置属性 var Element function elem
  • 如何从 CSS 选择器中提取类名?

    故事 我目前正在构建一个 ESLint 规则 以警告在 CSS 选择器定位器中使用引导布局导向和角度技术类 目前我在字符串方法中使用简单的子字符串 for var i 0 i lt prohibitedClasses length i if
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 在反应中访问回调内的 event.target

    我有以下课程片段 constructor props super props this timeout null search e gt clearTimeout this timeout this timeout setTimeout f
  • Elm:如何从 JSON API 解码数据

    我有这个数据使用http jsonapi org http jsonapi org format data type prospect id 1 attributes provider user id 1 provider facebook
  • onPress 方法中箭头函数与普通函数的行为

    正在学习 Native React 并学习更多关于 javascript 的知识 所以我仍然不明白它的行为的很多事情 我使用 TouchableOpacity 及其 onPress 属性创建了一个按钮组件 为了让它工作 我必须发送我想要执行
  • Vue - 调度完成后调用 store getter?

    我正在使用 Laravel 5 7 Vue2 Vuex 我在调度调用完成后让 Vue 返回存储值时遇到一些困难 我的申请流程如下 我单击一个提交按钮 该按钮调用组件上的 validate Validate 分派到我的 addLease 操作
  • 如何使用 JSON_TABLE 从 Oracle JSON 列获取键值作为结果集

    我用谷歌搜索了很多 似乎无法找到适合我的简单用例的简单解决方案 我在 Oracle 12C 数据库中有一个 json 列 当然实际上是一个带有 json 约束的 varchar 在该列中我存储了这样的 Map 表示 a 9 0847 b 8
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • JavaScript 阶乘防止无穷大

    我一直在 JavaScript 中使用这个函数来计算阶乘数 var f function factorial n if n 0 n 1 return 1 if f n gt 0 return f n return f n factorial

随机推荐

  • Transfuse 与 Dagger 相比如何?

    我正在尝试决定是使用 Transfuse 还是 Dagger 进行 Android 依赖注入 我从未使用过 Transfuse 并且对 Dagger 有基本了解 非常感谢 首先 我是输血 http androidtransfuse org因
  • 如何按特定文件类型过滤输入类型=“文件”对话框?

    当我单击浏览器的浏览按钮时 我想将浏览器限制为 JPG 文件
  • WCF 跨域使用 Jsonp 错误未捕获 SyntaxError:意外的标记:

    我正在尝试使用 jQuery 跨域调用 Web 服务 这是我调用服务的代码 document ready function ajax type GET async false contentType application json url
  • AWS Device Farm。如何将测试用例后生成的自定义报告保存到本地空间

    我正在使用 AWS 设备场 我的测试脚本在本地系统上运行时按预期工作 并在本地系统中的指定路径生成报告 现在 当我在设备场中运行代码时 不会生成报告 Am我错过了什么 这是我的测试代码 用于将测试用例写入 html 报告 package t
  • docs 文件夹中的 GitHub Pages 引用 docs 文件夹外部的文件

    我遵循了 GitHub 的文档并使用成功发布了我的项目页面docs我的项目存储库下的文件夹 但我想知道如何解决这个小问题 我正在开发一个 JavaScript 库wesa js http caiyi us wesa 源文件存储在src存储库
  • 如何使用 TypeORM 创建这个 ViewEntity?

    假设我正在构建一个有 4 个表的地址簿 user contact friend and stranger contact是链接表连接user与两个friend and stranger表 它的结构如下 id user id friend i
  • 为什么将 strlen 重新实现为循环+减法?

    灵感来自这个问题 https stackoverflow com q 6842130 57428关于 SQLite3 中的以下代码 static int strlen30 const char z const char z2 z while
  • 发布回复收件箱消息?

    我正在尝试通过发送 POST 请求来回复收件箱消息 message id comments 这是发送收件箱消息回复的正确方法吗 我收到以下错误 error type OAuthException message 3 App must be
  • c++ 打洞UDP(RTP)

    我正在做一个客户端 服务器语音聊天程序 非托管C win32 其中客户端使用TCP连接到服务器 文本聊天 聊天室功能是在TCP中完成的 而所有音频传输都是通过单独的UDP RTP套接字发送的 使用API来自 JRTPLIB 因此 从 TCP
  • 如何将数据帧字典绘制到子图

    我有一个包含不同系列的字典 每个系列都有不同的长度 我将为它们绘制条形图 每个都在一个子图中 这是字典 data df A 0 0 1 0 2 0 3 0 4 0 5 14343 6 14343 7 0 8 8107 9 11 10 0 1
  • WooCommerce - 将产品描述从选项卡移至摘要中

    我一直在寻找如何将 Woocommerce 单个产品页面上的产品描述从选项卡移至主要部分 我就是到处都找不到它 如果有人能帮助我 我将非常感激 因为我有点失去理智了 谢谢 担 Edit 提交后 我有了一个想法 所有的钩子都只是函数 所以我创
  • python sqlAlchemy:更改类位置后出现 InvalidRequestError

    如果我把CapacityMin类和单元测试类在同一个 py 文件中 一切安好 但我搬家后CapacityMin类到一个单独的文件 并运行单元测试 我得到这个错误 预期的 SQL 表达式 列或映射实体 DETAILS InvalidReque
  • 如果为空则隐藏表格行

    我的 JSP 中有一个表 当生成页面时 该表可以为空 我想知道是否有办法仅在它们中没有实际文本的情况下隐藏它们 这是它们的样子 table border 1 style padding left 4px tr td td tr table
  • 禁用单个(禁用)@Html.EditorFor 上的验证

    我读过 给定的执行方式似乎对于不同的操作 控制器具有不同的视图模型 在我看来 这有点矫枉过正 我想 Html EditorFor model gt model Ingredient Name new htmlAttributes new c
  • 如何将 Carbon AXUIElementRef 转换为 Cocoa NSWindow

    在我的项目中 我可以获得鼠标所在的窗口 并且我可以使用AXUIElementSetAttributeValue element kAXFrontmostAttribute kCFBooleanTrue 使窗口暂时处于顶层 所以我想将元素转换
  • 如何在 PrimeNG 15.4+ 中替换表头排序图标

    在最新版本的 PrimeNG 中 图标排序的方式发生了变化 他们曾经只是有一个i带有 CSS 类的标签 我可以在 CSS 中覆盖它以使用我公司的图标 但现在他们使用带有 SVG 的模板 我在他们的发行说明中看到如何覆盖菜单中的图标 例如下拉
  • git 提交目录

    我创建了一个存储库 并在本地将现有项目目录拖放到该存储库中 然后我做了类似 git add directory 的事情并提交并推送它 当我在 github 上查看我的存储库时 我看到的只是没有子文件夹 没有内容的目录 如何将该项目的所有文件
  • 如何将图库按钮添加到有意打开的相机中?

    在我的应用程序中 用户可以使用相机拍摄照片 我使用意图来启动它 Intent android provider MediaStore ACTION IMAGE CAPTURE 现在 当打开相机时 缺少图库按钮 该按钮允许用户从 SD 卡中选
  • 主导基线在 Firefox 中不起作用

    考虑以下示例 g transform translate 50px 50px dominant baseline central text anchor middle
  • 在 JavaScript 中分析 JSON 数据

    我并不是说这是一个完全聪明的想法 我认为 理想情况下 大量数据的计算应该在后端完成 但请幽默一下 我正在尝试从 JSON 源中提取视图数据并进行一些分析 给定以下数据源 group satellite 1 data label feed 1