javascript数组操作

从 api 获取到了固定格式的数据,但是需要分别用 hour 或者 day 来展示。
考虑到重复从 api 获取相同的数据是一件及其蛋疼而且会加重后端小伙伴工作量的事情,在这个案例中我决定将每次获取的初始数据存到 localStorage 中,
然后在转换展示格式的时候,通过 js 来处理数据。

是的这是我从上周五开始就有的想法,只不过今天才开始具体到数据处理这一步。
上午的一切还好,下午开始在 hour 与 day 之间转换的时候,简直就是整个人都处在一个懵逼的状态。
当然了现在觉得并没有那么复杂。只是一些之前没有接触过的数组的操作而以。大概就是以下几种。

1.单个数组中所有项求和

2.n个同样长度的数组叠加

3.单个数组去重

4.Object 遍历 ,取其中元素组成数组

5.Object 取 Key 组成数组

6.Object 替换 key-value 键值对

首先说第一个,这个是大家都很熟悉的,直接写循环就可以求和了

function sumArray(arr) { var sum = 0; for (var i=0;i<arr.length;i++) { sum += arr[i] }; return sum; }

对于小数据量的数组来说,这个还是简单方便的,此处建议把这个方法扩展到 Array 的 Prototype 中,方便使用。在今天的案例中我是定义了一个这样的方法。

第二个,就是我比较纠结的地方,毕竟n是一个未知数,而且这个n的长度我也是很难取到的。

这个是我纠结最长时间的,最后使用决定先定义一个所有元素都是0的数组。因为所有需要叠加的数组的长度是一定的。

然后用map()去遍历需要叠加的每一个数组,与之前定义的数组相加,如下

function reformDataByhour(obj) { var tempArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (var i in obj) { tempArr = tempArr.map(function(v,j) { return v + obj[i][j] }) } return tempArr; }

传入的 obj 参数是 key-value 对应的 Object ,每一个 value 都是需要叠加的数组。

单个数组去重这个。其实是不知道怎么去处理我的原始数据,最后只能用push()把所有项都放进一个空数组然后再去重

这个思路也比较简单,无非就是再定义一个空数组和一个空对象,对原始数组进行遍历,然后尝试在对象中取 key 为数组中元素的项,

如果没有取到,则将此元素放在空数组中,并定义一个 key 为此元素的项放在空对象中。

最后 return 定义的数组,如下

function arrayUnique(arr) { var res = []; var json = {}; for(var i = 0; i < arr.length; i++){ if(!json[arr[i]]){ res.push(arr[i]); json[arr[i]] = 1; } } return res; }

剩下三项是基本的数据操作,在此不做赘述

这一个项目相当考验对数据的逻辑思维能力。做完之后整个人都是懵逼的。在测试中偶然有两个数据是相等的,我们还以为是在数据转换中出了错。

排查的时候简直就是超大写的懵逼啊啊啊

over