1.针对数组的逻辑判断
1)写一个函数,功能是判断字符串是否为对称的字符串;
涉及数组处理方法:1.concat();2.reverse();
function judgeStr(str) { var a = str.split(''); var b = a.concat([]).reverse(); var i; var count = 0; for(i = 0;i< Math.ceil(a.length / 2);i++ ) { if(a[i] === b[i]) { count++; }; }; if(count === Math.ceil(a.length / 2)) { console.log("这是一个对称字符串"); }else { console.log("这不是一个对称字符串"); } };
2).数组去重
传统方法:
function uniq(arr) { var len = arr.length, i, j; for(i = 0; i < len; i ++) { for( j = i + 1; j < len; j ++) { if(arr[j] === arr[i]) { arr.splice(j, 1);//去掉重复的数,数组长度减一;循环次数减一,索引值j减一,保证数组中所有数都参与查重判断; len --; j --; } } } return arr; }
高大上的数组去重:
涉及Object的hasOwnProperty(item)方法,Array的indexOf(item)方法;
function uniq(a) { var prims = {"boolean":{}, "number":{}, "string":{}},//数组元素类型
objs = []; return a.filter(function(item) { //Array原型对象prototype的filter方法,可以实现数组的遍历。 var type = typeof item; if(type in prims) { return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); //hasOwnProperty()对象的一个方法
//用来判断某个属性是否存在;若存在则返回true;
}else { //数组元素为非布尔,数字,字符串时的判断操作,因为元素若为对象无法进行比较(obj1===obj2,即使看起来一样,但是返回值仍为false) return objs.indexOf(item) >= 0 ? false : objs.push(item); //当数组中不存在该数是插入到新数组中;
} }); }
数组去重实例:声明一个函数,传一个参数n,该函数返回一个数组,数组元素类型为number且值在[2,32]之间,要求数组元素不重复;
2.针对字符串的逻辑判断
1)翻转字符串;
比较笨的方法:
var str = "123456"; str = str.split('').reverse().join('');
优雅地实现字符串翻转的功能:
function flip(str) { var result = "", str = str || "", len = str.length, i; for (i = len -1; i >= 0; i --) { result += str.charAt(i); } //巧妙的实现字符串翻转,思路为:从末位开始依次取出待翻转字符串的字符,然后拼接到新的字符串中; return result; };
3.针对对象的逻辑判断。
用怎样的方式去遍历对象的属性?
1)采用for ... in ...方法
var obj = {name:zgatry, age:23, sex: male}, key; for(key in obj) { console.log(key); } //for... in ... 对遍历数组同样适用,此时key代表索引值
2)采用ES5的Object.keys()方法,相关规范参考以下链接:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Object.keys() 方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,与for... in ...的区别是,该方法不会遍历出该对象从其原型链中继承到的可枚举属性。
var fn = function(){}, fn1; fn.prototype.hobby=aaa; fn1 = new fn(); fn1["name"] = "zgatry"; fn1["age"] = 3; fn1["sex"] = "male"; for(var key in fn1) { console.log(key); }//输出name age sex hobby Object.keys(fn1);//输出["name", "age", "sex"]
//对数组来说,Object.keys()仍是输出索引值组成的数组
暂存.
attr和data都是取自定义属性的
attr是取属性自身的值;
data是取内存中的值;
通过修改data,自定义属性值看起来不会改变,用attr去取值,仍为初始值,而在内存中的自定义属性值已经改变了;