去重的一些方法总结(数组,二维,对象去重方式)

Array reduce方法去重

1
2
3
4
5
6
7
8
9
10
11
12
var arr = [1, 7, 7, 1, '1',3, 5, 3, '3', '5'];
var uniqArray = function(a) {
return a.reduce(function(p, c) {
console.log(p);
if (p.indexOf(c) < 0)
{
p.push(c);
}
return p;
}, []);
};
document.write(uniqArray(arr));

json去重

1
2
3
4
5
6
7
8
9
10
var arr2 = [];
var json = {};
for(var i = 0;i<arr.length;i++){
if(!json[arr[i]]){
arr2.push(arr[i]);
json[arr[i]] = arr[i];
console.log(json);
}
}
document.write(arr);

ES5 Array reduce方法的实现和使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
if (typeof Array.prototype.reduce != "function") {
Array.prototype.reduce = function (callback, initialValue ) {
var previous = initialValue,
k = 0,
length = this.length;
if (typeof initialValue === "undefined") {
previous = this[0];
k = 1;
}

if (typeof callback === "function") {
for (k; k < length; k++) {
this.hasOwnProperty(k) && (previous = callback(previous, this[k], k, this));
}
}
return previous;
};
}

var sum = [1, 2, 3, 4].reduce(function (previous, current, index, array) {
return previous + current;
});

document.write(sum+'</br>'); //10
var matrix = [
[1, 2],
[3, 4],
[5, 6]
];

// 二维数组扁平化
var flatten = matrix.reduce(function (previous, current) {
return previous.concat(current);
});

document.write(flatten); // [1, 2, 3, 4, 5, 6]

Git常用命令总结

  
git init  把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
  
git add XX  把xx文件添加到暂存区去。
  
git commit –m “XX”  提交文件 –m 后面的是注释。
  
git status  查看仓库状态
  
git diff XX  查看XX文件修改了那些内容
   
git log  查看历史记录
  
git reset –hard HEAD^  或者 git reset –hard HEAD~ 回退到上一个版本
  
  (如果想回退到100个版本,使用git reset –hard HEAD~100 )
  
git reflog  查看历史记录的版本号id
  
git checkout — XX  把XX文件在工作区的修改全部撤销。

HTTP缓存原理的介绍

  通过Internet获取资源既缓慢,成本又高。为此,Http协议里包含了控制缓存的部分,以使Http客户端可以缓存和重用以前获取的资源,从而优化性能,提升体验。虽然Http中关于缓存控制的部分,随着协议演进,有一些变化。但我觉着,作为后端程序员,在开发Web服务时,只需要关注请求头If-None-Match、响应头ETag、响应头Cache-Control就足够了。因为这三个Http头就可以满足你的需求,并且,当今绝大多数的浏览器,都支持这三个Http头。我们所要做的就是,确保每个服务器响应都提供正确的 HTTP 头指令,以指导浏览器何时可以缓存响应以及可以缓存多久。
http 1.jpg

电商网站前端架构笔记

1.简介

技术储备   

  前端的架构设计是一个复杂的课题,最近刚刚看了一个关于电商网站架构的设计视频。再此记录下自己的学习过程。前端的架构涉及很多知识点,首先是前端必备的三驾马车,JavaScript/HTML/CSS。掌握这些是基础中的基础。当掌握了这些语言之后,要掌握一些基本的框架和类库,比如jQuery库、requirejs/sea.js等一些模块化框架、MVC framework(Angular.JS等)。接着我们要去更多的优化代码,以及学会如何继承与重用,这就涉及到JS中设计模式的问题。然后是性能优化,当然我们的优化要考虑的更多。常用到的有cache的优化,如HTTP cache/localStorage cache,DOM渲染优化,compress等等很多。其他的点还包括Restful API design & 前端自动化(grunt/gulp/Node.js)&跨终端适配&代码托管(Git)等。

产品设计和发布迭代

  尽可能多的参与交互设计师与产品经理的设计过程。通过这个过程可以更多的去思考产品本身的一些特点。关注用户体验。产品完成后要了解产品发布的过程。通过发布系统与业务挂钩,后期不停更新跟踪。

数据分析和优化

  将自己的产品发布到线上以后,通常需要通过线上数据对产品进行一系列的数据统计和优化。我们可以通过一些数据分析和统计工具帮助我们更好的对产品进行改良。