javascript数组-笔记

数组去重复

思路:

  1. 创建一个新的数组存放结果和创建一个空对象
  2. for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。

说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

Array.prototype.unique3 = function() {
	var res = [];
	var json = {};
	for (var i = 0; i < this.length; i++) {
		if (!json[this[i]]) {
			res.push(this[i]);
			json[this[i]] = 1;
		}
	}
	return res;
};
var arr = [112, 112, 34, '你好', 112, 112, 34, '你好', 'str', 'str1'];
console.log(arr.unique3());

判断数组

typeof 就可以判断大部分的类型;

console.log(typeof {a:2}); // "object" 
console.log(typeof []); // "object"
console.log(typeof null); // "object" 
console.log(typeof function() {return 1;}); // "function" 
console.log(typeof 'abc'); // "string" 
console.log(typeof 1); // "number" 
console.log(typeof a); // "undefined" 
console.log(typeof undefined); // "undefined" 
console.log(typeof true); //"boolean"

可惜其中数组,对象和null都判断为对象。

es5中Array.isArray(arr);就可以直接判断是否是数组,但不兼容ie8

还可以使用Object.prototype.toString()来检测数据类型,比如数组。

下面代码能兼容到ie8

function isArrayFn(value) {
	if (typeof Array.isArray === 'function') {
		return Array.isArray(value);
	} else {
		return Object.prototype.toString.call(value) === '[object Array]';
	}
}

console.log(isArrayFn([1,2,3]));//true

其中Object.prototype.toString(),方法参考这里

下面代码,相对不错的检测数据类型方法

function isTypeFn(o) {
	return Object.prototype.toString.call(o).slice(8,-1);
}

function isFnIE8(o) {
	if(o===null) return 'Null';
	if(o==='Undefined') return 'Undefined';
	return Object.prototype.toString.call(o).slice(8,-1);
}

console.log(isFn(null));                  //"Null"
console.log(isFn(undefined));             //"Undefined"
console.log(isFn(1));                     //"Number"
console.log(isFn(""));                    //"String"
console.log(isFn(true));                  //"Boolean"
console.log(isFn({}));                    //"Object"
console.log(isFn([]));                    //"Array"
console.log(isFn(new Date()));            //"Date"
console.log(isFn(/./));                   //"RegExp"
console.log(isFn(function f(){}));        //function

转载于:https://my.oschina.net/f89/blog/906092

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值