array的indexOf

整理了一些设计Grid时候依赖产生的api思考,开始发布

 

需求是这样的:

 

1.设计前我定义了选中行的属性selectedRows是一个[],用来存放所有选中行的index信息,方便后面的选中和取消选中等相关操作。

 

2.现在你设计选中行和取消选中行的时候,你一定会判断当前的rowIndex是否在这个数组selectedRows里面,但是我们知道没有原生的api去支持这个arrray.indexOf.

 

先看看tangram的做法吧

 

 

/*
首先说明一下本人做了一下小修改,去掉了一个变量的定义。因为没有引用的地方。
*indexOf-search the index of the element in a array*
*@function*
*@param {Array} source---the array*
*@param element---the element*
*@param {number} fromIndex---the start index for search
*@remark(_ps:if fromIndex <0 will set it to source.length+fromIndex)*
*@return {number} if not find will return -1 just like js-lib*
*/
ZYC.array.indexOf = function(source,element,fromIndex){
      var _lenth = source.length,  //源数组对象的length
	      //iterator = element;
	  fromIndex = fromIndex || 0;     //给一个默认值,这个做法我个人一直遵循
	  if(fromIndex < 0){              
	     //if < 0  支持负值方向查询
		 fromIndex = Math.max(0,_lenth + fromIndex);
	  }
	  for(;fromIndex<_lenth;fromIndex++){
		    if(fromIndex in source && source[fromIndex] === element){
			   return fromIndex;
			}
	  }
	  return -1;
};

//在自己开始设计的时候并没有想到像tangram一样支持index似的的查找
//而且比较好的是支持类似于string.slice()这样的原生api的负值反向查找的功能 

 

通过上述的indexOf,我上面的需求也已经完成了

 

简单举例:

 

 

var selectedRows = [0,1,2];

//在设计getSelected的时候
//判断是否选中
//rowIndex是当前的行序号
//isSelected是当前行是否被选中
//g是grid对象或者api内部的this
var isSelected = (ZYC.array.indexOf(g.selectedRows,rowIndex) != -1);

你可能感兴趣的:(js,array,indexOf)