发表于: 2017-03-25 16:16:37
1 1175
任务十五
今天完成的事情
- 1. 学习css的bem命名法,b是块block,e是元素element,m是状态modifier。实例演示:
<form class="search-form">
<input type="text" class="search-form__username">
<input type="password" class="search-form__password">
<button id="J_Submit" class="search-form__submit--active"></button>
<form>- 2.学习js变量的命令规范
- 变量采用驼峰命名,根据不同的类型选择不同的首字母,以下命名方法只是其中一种,具体的以各公司团队规定为准。
- s:表示字符串。例如:sName,sHtml;
- n:表示数字。例如:nPage,nTotal;
- b:表示逻辑。例如:bChecked,bHasLogin;
- a:表示数组。例如:aList,aGroup;
- r:表示正则表达式。例如:rDomain,rEmail;
- f:表示函数。例如:fGetHtml,fInit;
- o:表示以上未涉及到的其他对象,例如:oButton,oDate;
- g:表示全局变量,例如:gUserName,gLoginTime
- 3.学习数组的去重算法。
- 4.测试function中未声明的变量是否会成为全局变量,答案是会,与其所在函数内和函数外没有关系。
明天计划的事情
- 1.准备ppt。
- 2.学习洗牌算法。
遇到的问题
1.对于数组去重,比较暴力的方法是使用两个for循环对整个数组遍历,想看以下有没有好一点的其他办法,然后在网上发现了一个比较巧妙的办法:
var arr = [1,2,3,1,1,1,1];
function toHeavy(array){
//这是一个缓存对象,用来实现过滤到重复的数据
var cache = {};
//定义一个中间数组,用来实现当容器
var cacheArr = [];
for(var i = 0,len = array.length;i<len;i++){
if(!cache[array[i]]){
cacheArr.push(array[i]);
cache[array[i]] = array[i];
};
};
return cacheArr;
};
arr = toHeavy(arr);//arr == [1,2,3]
- 大致思路是,将数组的每一个值变为cache对象的属性名,比如数组[1,2],传给cache的对象属性名,cache对象就多了1,2这2个属性,传完以后再通过判断cache对象1属性存不存在来判断1有没有在剩下的数组中重复。不过这段代码有一个小问题,判断对象属性是否存在使用的是判断cache[array]的值这一方法,当不存在时值为underfined,但是如果数组中的值为0或者空字符串,就会会出现问题。所以应该改为!(array[i] in cache),通过使用in运算符的方式来判断。
收获
- 1学习了css和js的一般命名方法。
- 2.学会了数组去重的方法。
评论