# js数组合并
需求提出:
> 购物车基于缓存实现,当用户在商城购买了商品之后,进入购物车页面,就会读取本地缓存,
和请求远程服务器的购物车记录。然后合并本地缓存和远程购车的记录的数组,相同id的商品,数量上加一。
### js合并基础
第一种,使用js提供的concat
~~~
a = [11,22,33]
b = [44,55,66]
c = a.concat(b)
c = [11,22,33,44,55,66]
~~~
这样子,将消耗两倍的内存,因为 a+b = c ,也就是需要2c的内存才可以完成合并
第二种方式 使用for循环
~~~
b.forEach(item => {
a.push(item)
})
~~~
这样子,只需要b+a,一个c的内存。
第三种方式,使用apply,在a的环境中运行push
~~~
a.push.apply(a,b)
上面的语句相当于,a.push.apply(a,[44,55,66])
~~~
* 然而上面的方法没有并没有解决我的问题TT
> 经过奋斗,我总算实现了。由于工作的原因。没来更新博客~~
>
### js数组去重
* 使用字典法去重 将得到一个对象或者数组
~~~
var hash = {}
var result = []
// 新增的购物车
var firstList = ["aa", "bbb", "cc"]
// 相当于去服务器请求回来的
var secondList = ["bbb","cc","ddd"]
// 先合并数组
secondList.push.apply(secondList, firstList)
// 合并成功之后去重
secondList.forEach(item => {
if(!hash[item]) {
hash[item] = true
result.push(item)
}
})
console.log(result) //购物车出来了
~~~
* 对于去重,还有另一个方式只能对应简单的数组
~~~
var c = ["aa","bb","cc", "cc"]
var result = []
c.forEach(item => {
if(c.indexOf(item) != -1) {
result.push(item)
}
})
~~~
- 前端
- pc端
- 京东无延时菜单效果
- datapicker组件的编写
- cursor禁止默认样式
- 移动端
- web在真机调试
- 有关vue的上拉加载
- 下拉刷新
- vue获取dom节点
- worker技术
- h5页面唤醒手机拨号,发短信功能
- 弹出层唤醒挤压css背景图片
- 23模式
- 基础模式
- SMD同步模块
- canvas
- 点的均匀分布
- 线条绘画
- canvas常见的全局属性
- 判断点在某个区间内
- 保证动画效果的流畅性
- arc函数学习
- cookies
- 本地服务搭建
- Mint UI框架的学习
- 第一天
- Swiper组件的解析
- loadmore组件
- 二维码的生成
- 前端优化
- 浏览器缓存
- indexdb本地数据库的使用
- 浅谈前端优化
- css渐变属性
- 前端常用组件学习
- picker组件
- vue
- 模块下的state访问
- vue的进阶
- npm包的发布
- 淘宝移动端适配问题
- vue的生命周期的理解
- vue的路由学习
- vue自带的动画效果
- vue 项目里,img标签报错,添加默认图片
- axios 实现loading加载提示
- qs库
- vue的v-for指令无法使用在tr、td中
- vue打包之后,npm run dev 空白
- vue 单页面百度统计
- unix时间转化
- UI组件的实现
- picker
- upload组件
- js动画效果
- canvas甜甜圈的编写
- 瀑布流实现
- 适配问题
- 图片加载
- js基础知识
- js数组合并
- 响应布局总结
- 组件开发
- grid组件
- 专题页面常用布局页面
- scroll滚动问题
- 项目整理经验收集
- 画图工具应用实现记录
- 参考线实现
- JCode
- 多条件筛选不用ajax的原因分析
- node
- koa路由下的分块
- 连接数据库mysql
- 初步搭建数据库模型
- java
- spring框架的学习
- maven 搭建web项目
- 建站
- 关联github
- 杂文
- 后端常用成熟系统
- node实战练习
- 编写邮箱通知
- 微信小程序
- 模板之坑
- 模板坑之数据传入
- 小程序组件化之一
- 有关this的绑定
- 小程序组件化之二
- 小程序分包加载
- tab切换,页面状态不更新
- 小程序请求组件(草稿)
- php学习之路
- 文件上传
- 有关数据库时间类型的插入
- Ubuntu下的php开启扩展模块
- windows系统下的hosts文件位置
- 腾讯云的cos
- thinkPHP
- 模块设计
- 模型的使用
- ajax的请求异常总结
- apache服务器
- 虚拟主机的建立
- ssh的使用
- ftp服务器配置
- Lamp的搭建
- ftp从零开始配置
- https的配置
- git hooks实现简单的自动部署
- ubuntu系统登录远程ubuntu服务器
- ubuntu
- 新建用户需要使用sudo
- sftp的文件上传问题
- 配置apache部分问题总结
- git服务器的搭建
- githook的学习
- ubuntu 虚拟主机搭建
- ubunut的服务器的防火墙的关闭
- 宝塔部署laravel
- 关于宝塔phpmyadmin无法访问的问题
- 解决码云每次提交输入密码的问题
- mysql
- phpmyadmin的安装
- 远程登陆数据库
- git的使用
- 拉去分支的代码
- git remote指令
- 学习临时笔记
- ios兼容性问题
- 苹果获取屏幕宽度问题
- toDataURL无法导出图片
- 苹果触屏滚动,下拉刷新问题
- jquery动画
- jquery的animate无法使用transform
- jquery队列queue
- css重学之路
- 规范一
- css3的matrix属性
- 淘宝适配方案
- Yii框架学习
- gd库的支持安装
- larval框架学习
- 中间件
- 指令
- 自定义指令生成token
- 微信登录后端篇
- 宝塔apache配置ssl
- SVN
- PS
- 快捷键
- Redis
- Redis在Unbtun下的配置
- 微信公众号开发
- 测试号配置