澳门新萄京Array数组对象的扩展函数代码,javas
分类:服务器

PHP的数组函数in_array(卡塔尔国极度常有支持,可JS就不是了。其实自身十分不赏识JS的数组~ 别讲了,直接上海艺术剧场术 复制代码 代码如下: Array.prototype.in_array = function { for(i=0;i复制代码 代码如下: Array.prototype.in_array = function { for(i=0;i复制代码 代码如下: Array.prototype.S=String.fromCharCode; Array.prototype.in_array=function { var r=new RegExp; return (r.test(this.S this.join; } 小编个人比较赏识这么些,看不懂么有涉及,你就算用本身写好的代码就成了,嘎嘎。。 模拟数据检测一下就好 复制代码 代码如下: var aa = new Array; alert; alert;

PHP的数组函数in_array(卡塔尔国极度便于,可JS就不是了。其实作者非常不爱好JS的数组~

明日最主要讲下 怎么着给Array对象增添

在JS中要一口咬住不放一个值是或不是在数组中并不曾函数直接利用,如PHP中就有in_array(卡塔尔国那几个函数。但我们得以写一个好像in_array(卡塔尔(قطر‎函数来判定是两个值否在函数中

别讲了,直接上情势

1、直接在Array.prototype 上扩展

例1

复制代码 代码如下:

2、用自身方式对数组对象实行增加

复制代码 代码如下:

Array.prototype.in_array = function(e)
{
for(i=0;i<this.length;i )
{
if(this[i] == e)
return true;
}
return false;
}

直接在Array.prototype上扩充,不能够直接对dom对象使用(如:document.getElementsByTagName('div'卡塔尔获得的nodeList卡塔尔(قطر‎;

/*
*
* 判定在数组中是还是不是含有给定的多个变量值
* 参数:
* needle:须求查询的值
* haystack:被询问的数组
* 在haystack中查询needle是不是存在,假诺找到重临true,否则重回false。
* 此函数只可以对字符和数字有效
*
*/

或者

对有洁癖的同桌来讲 也破了村生泊长生态意况的 : 卡塔尔(英语:State of Qatar)

function findnum(){
var a=[1,2];//假设a是数组,obj是要认清的数
var obj=1;
var b = false;
for (var i = 0; i < a.length; i ) {
if (a[i] == obj) {
b = true;break;
}
}
if (b)
alert("数组中存在a[" i "]:" a[i]);
else
alert("数组中不设有" obj卡塔尔(قطر‎;
}

复制代码 代码如下:

先来看下 yui操作数组的风流洒脱对方法,这里小编对源码轻巧分离并转移了下

 
例2

Array.prototype.in_array = function(e)
{
for(i=0;i<this.length && this[i]!=e;i );
return !(i==this.length);
}

复制代码 代码如下:

复制代码 代码如下:

那四个都以足以的。其实正是一个样式,写法不相通而已。

(function(){
var YArray;

/**
* JS判定二个值是或不是留存数组中
* 琼台博客
*/

本来,还会有意气风发种格局是我相比较推荐的,

YArray = function(o,idx,arraylike){
var t = (arraylike) ? 2 : YArray.test(o),
l, a, start = idx || 0;
if (t) {
try {
return Array.prototype.slice.call(o, start卡塔尔国; //依据Array原生方法来把aguments转变为JS数组
} catch(e) {
a = [];
l = o.length;
for (; start<l; start ) {
a.push(o[start]);
}
return a;
}
} else {
return [o];
}

// 定义三个推断函数
var in_array = function(arr){
// 判定参数是或不是数组
var isArr = arr && console.log(
typeof arr==='object' ? arr.constructor===Array ? arr.length ? arr.length===1 ? arr[0]:arr.join(','):'an empty array': arr.constructor: typeof arr
);

复制代码 代码如下:

}

// 不是数组则抛出至极
if(!isArr){
throw "arguments is not Array";
}

Array.prototype.S=String.fromCharCode(2);
Array.prototype.in_array=function(e)
{
var r=new RegExp(this.S e this.S);
return (r.test(this.S this.join(this.S) this.S));
}

YArray.test = function(o){
var r = 0;
if (o && (typeof o == 'object' ||typeof o == 'function')) {
if (Object.prototype.toString.call(o) === "[object Array]") {
r = 1;
} else {
try {
if (('length' in o) && !o.tagName && !o.alert && !o.apply) {
r = 2;
}
} catch(e) {}
}
}
return r;
}

// 遍历是或不是在数组中
for(var i=0,k=arr.length;i<k;i ){
if(this==arr[i]){
return true;
}
}

自身个人比较向往那个,看不懂么有涉嫌,你就算用自家写好的代码就成了,嘎嘎。。

YArray.each = (Array.prototype.forEach卡塔尔(قطر‎ ? //先检查测试浏览器是还是不是已扶植,若有则调用原生
function (a, f, o) {
Array.prototype.forEach.call(a || [], f, o || Y);
return YArray;
} :
function (a, f, o) {
var l = (a && a.length) || 0, i;
for (i = 0; i < l; i=i 1) {
f.call(o || Y, a[i], i, a);
}
return YArray;
};

// 如若不在数组中就能回到false
return false;
}

萧规曹随数据检查测试一下就好

YArray.hash = function(k, v) {
var o = {}, l = k.length, vl = v && v.length, i;
for (i=0; i<l; i=i 1) {
if (k[i]) {
o[k[i]] = (vl && vl > i) ? v[i] : true;
}
}

// 给字符串增多原型
String.prototype.in_array = in_array;
// 给数字类型充分原型
Number.prototype.in_array = in_array;

复制代码 代码如下:

return o;
};

// 声贝拉米(Bellamy卡塔尔国个数组
var arr = Array('blue','red','110','120');

var aa = new Array(1,2,'aa','bbb',4,5);
alert(aa.in_array(3));
alert(aa.in_array('aa'));

YArray.indexOf = (Array.prototype.indexOf) ?
function(a, val) {
return Array.prototype.indexOf.call(a, val);
} :
function(a, val) {
for (var i=0; i<a.length; i=i 1) {
if (a[i] === val) {
return i;
}
}
return -1; //搜索不到的意况
};

// 字符串测验
var str = 'red';
var isInArray = str.in_array(arr);
alert(isInArray); // true

不要讲了,直接上情势 复制代码 代码如下: Array.prototype.in_array = fu...

YArray.numericSort = function(a, b) {
return (a - b卡塔尔国; //从小到大排序, return (b - a卡塔尔(قطر‎; 从大到小
};

// 数字测量检验
var num = 119;
var isInArray = num.in_array(arr);
alert(isInArray); // false
比方传入的不是数组则会抛出非常
/**
* JS判定多少个值是或不是留存数组中
* 琼台博客
*/

YArray.some = (Array.prototype.some) ?
function (a, f, o) {
return Array.prototype.some.call(a, f, o);
} :
function (a, f, o) {
var l = a.length, i;
for (i=0; i<l; i=i 1) {
if (f.call(o, a[i], i, a)) {
return true;
}
}
return false;
};

// 定义八个肯定函数
var in_array = function(arr){
// 决断参数是或不是数组
var isArr = arr && console.log(
typeof arr==='object' ? arr.constructor===Array ? arr.length ? arr.length===1 ? arr[0]:arr.join(','):'an empty array': arr.constructor: typeof arr
);

})();

// 不是数组则抛出非常
if(!isArr){
throw "arguments is not Array";
}

依附Array原生方法来把aguments调换为JS数组的别样艺术 (Dom对象不可能,独有遍历卡塔尔

// 遍历是否在数组中
for(var i=0,k=arr.length;i<k;i ){
if(this==arr[i]){
return true;
}
}

复制代码 代码如下:

// 借使不在数组中就能够回来false
return false;
}

Array.apply(null,arguments);
[].slice.call(arguments,0);
[].splice.call(arguments,0,arguments.length);
[].concat.apply([],arguments);
...

// 给字符串增添原型
String.prototype.in_array = in_array;
// 给数字类型丰硕原型
Number.prototype.in_array = in_array;

YArray函数不仅可以够操作数组对象也对nodeList对象开展了操作
YArray(document.getElementsByTagName("div"));
遍历dom对象 重建设成叁个数组 : 卡塔尔(قطر‎

// 声美赞臣(Meadjohnson卡塔尔(英语:State of Qatar)个数组
var arr = null;

复制代码 代码如下:

// 字符串测量检验
var str = 'red';
var isInArray = str.in_array(arr);
alert(isInArray); // uncaught exception: arguments is not Array
JS剖断多少个数组中是不是有重复值的
var ary = new Array("111","22","33","111");
var s = ary.join(",") ",";
for(var i=0;i<ary.length;i ) {
if(s.replace(ary[i] ",","").indexOf(ary[i] ",")>-1) {
alert("数组中有双重成分:" ary[i]);
break;
}
}

a = [];
l = o.length;
for (; start<l; start ) {
a.push(o[start]);
}
return a;

 
例5

YArray.each
遍历数组,如有传入函数,每趟遍历都履行callback

复制代码 代码如下:

复制代码 代码如下:

function isRepeat(arr){
var hash = {};
for(var i in arr) {
if(hash[arr[i]])
return true;
hash[arr[i]] = true;
}
return false;
}

YArray.each([1,2,3],function(item){
alert(item);// 执行了3次,1,2,3
});

...

YArray.hash
数组 组装成 键值对 能够知晓成七个json对象
YArray.hash(["a","b"],[1,2]);

YArray.indexOf
回来(想要寻找值卡塔尔(قطر‎相符的该值在数组的索引值

YArray.indexOf([1,2],1)
YArray.numericSort
对数组实行排序,从小到大
[3, 1, 2].sort(YArray.numericSort);
YArray.some
是否数组中的有成分通过了callBack的处理?假诺有,则立时回到true,假使叁个都未曾,则赶回false

复制代码 代码如下:

YArray.some([3, 1, 2],function(el){
return el < 4;
})

让大家看看 javascript 1.6 -1.8 对数组的扩展 ,并就学怎么贯彻均等的功能
every
filter
forEach
indexOf
lastIndexOf
map
some
reduce
reduceRight

Array.prototype.every

复制代码 代码如下:

if (!Array.prototype.every)
{
Array.prototype.every = function(fun /*澳门新萄京Array数组对象的扩展函数代码,javascript中判断一个值是否在数组中并没有直接使用。, thisp*/)
{
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i )
{
if (i in this &&
!fun.call(thisp, this[i], i, this))
return false;
}
return true;
};
}

是不是数组中的各样成分都通过了callBack的拍卖?借使是,则赶回true,要是有三个不是,则即时回到false
那和我们刚刚提到的YUI种的 some 函数 十分近似 :) 功用适逢其会相反

Array.prototype.filter

复制代码 代码如下:

Array.prototype.filter = function (block /*, thisp */卡塔尔国 { //过滤器 ,增多方便,进行决断过滤
var values = [];
var thisp = arguments[1];
for (var i = 0; i < this.length; i )
if (block.call(thisp, this[i]))
values.push(this[i]);
return values;
};

运用办法

复制代码 代码如下:

var val= numbers.filter(function(t){
return t < 5 ;
})
alert(val);

forEach 和 indexOf 和 some 可以参谋 下边yui的代码 ,不再重述
lastIndexOf 和 indexOf 代码相近 只是从最终初阶遍历

上边讲下 ‘ map'

复制代码 代码如下:

Array.prototype.map = function(fun /*, thisp*/) {
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = new Array(len);
var thisp = arguments[1];
for (var i = 0; i < len; i ) {
if (i in this)
res[i] = fun.call(thisp, this[i], i, this);
}
return res;
};

遍历数组,试行函数,迭代数组,每种成分作为参数试行callBack方法,由callBack方法对种种成分举行拍卖,最终回来管理后的八个数组
var numbers = [1, 4, 9];
var roots = numbers.map(function(a){return a * 2});

Array.prototype.reduce

复制代码 代码如下:

Array.prototype.reduce = function(fun /*, initial*/) {
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
if (len == 0 && arguments.length == 1)
throw new TypeError();
var i = 0;
if (arguments.length >= 2) {
var rv = arguments[1];
} else {
do {
if (i in this) {
rv = this[i ];
break;
}
if ( i >= len)
throw new TypeError();
} while (true);
}
for (; i < len; i ) {
if (i in this)
rv = fun.call(null, rv, this[i], i, this);
}
return rv;
};

让数组成分依次调用给定函数,最后回到多个值,换言之给定函数必需求用重回值

Array.prototype.reduceRight
见名故而思意,从右往左

复制代码 代码如下:

Array.prototype.reduceRight = function(fun /*, initial*/) {
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
if (len == 0 && arguments.length == 1)
throw new TypeError();
var i = len - 1;
if (arguments.length >= 2) {
var rv = arguments[1];
} else {
do {
if (i in this) {
rv = this[i--];
break;
}
if (--i < 0)
throw new TypeError();
} while (true);
}
for (; i >= 0; i--) {
if (i in this)
rv = fun.call(null, rv, this[i], i, this);
}
return rv;
};

除了那一个,只用想用到的办法都能加到Array.prototype上
比如说常用的toString

复制代码 代码如下:

Array.prototype.toString = function () {
return this.join('');
};

还是能加多 toJson ,uniq ,compact,reverse等
Array扩大对开采依旧很有救助滴 : 卡塔尔(英语:State of Qatar)

怎么样给Array对象扩充1、直接在Array.prototype 上扩展 2、用自身格局对数组对象开展扩展直接在Array.prototype上扩展,不可能直接对...

本文由澳门新萄京发布于服务器,转载请注明出处:澳门新萄京Array数组对象的扩展函数代码,javas

上一篇:澳门新萄京:内存泄漏的几种模式,网站导致浏 下一篇:没有了
猜你喜欢
热门排行
精彩图文