Javascript中JSON数据分组优化实践及JS操作JSON总结
前端展示中,经常会遇到需要按照时间对大量数据进行分组呈现的场景。比如我们手头上有一组如下的JSON数据:
```json
[
{"date":"2017-12-22","start_time":"10:00:00","end_time":"10:00:00","status":"Performance Time"},
{"date":"2017-12-22","start_time":"10:40:00","end_time":"10:40:00","status":"Performance Time"},
{"date":"2017-12-23","start_time":"10:00:00","end_time":"10:00:00","status":"Performance Time"},
{"date":"2017-12-23","start_time":"10:40:00","end_time":"10:40:00","status":"Performance Time"}
]
```
我们需要将其转化为按日期分组的形式,以便于前端视图的展示。转化后的数据应该如下:
```json
[
{
"date": '2017-12-22',
"data": [
{"date": '2017-12-22', "start_time": '10:00:00', "end_time": '10:00:00', "status": 'Performance Time'},
{"date": '2017-12-22', "start_time": '10:40:00', "end_time": '10:40:00', "status": 'Performance Time'}
]
},
{
"date": '2017-12-23',
"data": [
// ...类似的结构
]
}
]
```
关于如何实现这一转化,最初的方法虽然能达成目的,但效率和优雅度有待提升。我们最初使用for循环遍历数组,虽然运行效率尚可(遍历约千个数据约需3ms),但代码略显冗长。接下来,我们可以尝试利用ES5的特性进行优化。
我们可以将for循环替换为forEach和every方法,提高代码的可读性和简洁性。下面是优化后的代码示例:
```javascript
let map = {}, nList = []; //初始化map和nList数组用于存储分组数据
arr.forEach((item) => { //使用forEach遍历原始数组中的每一项数据
if (!map[item.date]) { //如果map中没有该日期的数据项,则创建一个新的分组对象并添加到nList中
nList.push({ date: item.date, data: [item]}); //添加新的分组对象到nList中,并设置map中该日期的值为当前项数据(用于后续比对)
性能优化实践
在处理有序数组时,我发现一种巧妙的方法可以去除重复的日期循环,从而提高效率至约50%,处理时间缩短至约1毫秒!这是如何做到的呢?
假设我们有一个数组`arr`,其中的`date`属性是按顺序排列的,而且没有重复。我们可以利用这个特点进行优化。我们创建一个空的映射对象`map`和一个空数组`nList`。然后,我们遍历数组中的每个元素。对于第一个元素,我们直接将其添加到`nList`中。对于后续的元素,我们检查其日期是否与上一个元素的日期相同。如果相同,我们将其添加到当前映射对象的`data`数组中;如果不同,我们创建一个新的映射项并将其添加到`nList`中。通过这种方式,我们可以避免不必要的循环,显著提高效率。
PSJS操作JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,以其独立于语言的文本格式成为理想的数据交换媒介。作为JavaScript的原生格式,JSON在JavaScript中处理不需要任何特殊的API或工具包。
在处理JSON数据时,主要涉及到两种结构:对象和数组。对象由名称/值对组成,以花括号括起,并通过逗号分隔。数组则是有序的值集合,以方括号括起,同样通过逗号分隔。
为了更好地处理JSON数据,我们常常需要完成JSON字符串和JSON对象之间的转换。例如,当我们在数据传输过程中接收到一个JSON字符串时,我们需要将其转换为JSON对象以便在JavaScript中进行操作。幸运的是,JSON提供了多种方法来实现这一转换。我们可以使用`eval()`函数、`parseJSON()`方法或现代的`JSON.parse()`方法来完成转换。一旦我们获得了JSON对象,就可以轻松地访问其属性,例如`obj.name`和`obj.sex`。
需要注意的是,如果对象已经是一个JSON对象,多次使用`eval()`函数进行转换可能会导致问题。在进行转换时,我们应该确保字符串确实是一个有效的JSON字符串。这样,我们就可以轻松地在JavaScript中操作JSON数据了。在JavaScript的世界里,处理JSON对象与字符串之间的转换是一项基础且重要的任务。你可以使用内建的函数来轻松完成这一操作。
对于将JSON对象转化为JSON字符串,你有两个主要的方法可以选择。第一种是使用 `toJSONString()` 方法,它通常存在于某些特定的库或框架中,如你所提到的 `json.js` 包。另一种则是使用全局的 `JSON.stringify()` 方法,这是JavaScript内建的方法,适用于所有现代浏览器和Node.js环境。
示例代码如下:
```javascript
// 使用toJSONString()方法(假设来自json.js包)
var obj = {key: 'value'};
var last = obj.toJSONString(); // 将JSON对象转化为JSON字符串
console.log(last); // 输出:"{\"key\":\"value\"}"
// 或者使用JSON.stringify()方法(内建方法)
var last = JSON.stringify(obj); // 将JSON对象转化为JSON字符串
console.log(last); // 输出同上:"{\"key\":\"value\"}"
```
请注意,`toJSONString()` 和 `JSON.stringify()` 的主要区别在于它们可能来自不同的来源,并且可能在某些特定情况下有不同的行为或额外的功能。根据你的具体需求和使用的环境来选择合适的方法。如果你的环境中没有找到 `toJSONString()` 或 `parseJSON()` 方法,可能是因为你的 `json` 包版本过低。在这种情况下,你可能需要更新你的 `json` 包或改用内建的 `JSON.stringify()` 和 `JSON.parse()` 方法。要记住除了eval()函数外,其他的函数都来自于json包,而非JavaScript的内建函数。这些函数的使用和特性可能会因库的版本不同而有所差异。因此在使用时请确保理解你正在使用的版本的具体特性。
微信营销
- Javascript中JSON数据分组优化实践及JS操作JSON总结
- 实用jquery操作表单元素的简单代码
- 利用ajax+php实现商品价格计算
- JavaScript数组_动力节点Java学院整理
- JS实现电商放大镜效果
- 浅谈从ASP.NET Core2.2到3.0你可能会遇到这些问题
- Element 默认勾选表格 toggleRowSelection的实现
- Vue 实现列表动态添加和删除的两种方法小结
- angularjs封装$http为factory的方法
- phalcon框架使用指南
- MySQL 5.7.22 二进制包安装及免安装版Windows配置方法
- 基于PHP和Mysql相结合使用jqGrid读取数据并显示
- Yii2框架redis基本应用示例
- JSP中param标签用法实例分析
- 细说Vue组件的服务器端渲染的过程
- webpack配置文件和常用配置项介绍