有一个应用,在数组里面包含一些特殊的记录,这些特殊记录作为断开标志,断开的记录与相邻的记录又组成一个整体,调试代码如下,可以调整 status=-1 来观察一下的结果
<html>
<script>var a={key:1, status :1};//0
var a2={key:2,status:1};//1
var a3={key:3,status:1};//2
var a4={key:4,status:1};//3
var a5={key:5,status:1};//4
var a6={key:6,status:1};//5
var a7={key:7,status:1};//6
var a8={key:8,status:1};//7
var ay =[];
ay.push(a);
ay.push(a2);
ay.push(a3);
ay.push(a4);
ay.push(a5);
ay.push(a6);
ay.push(a7);
ay.push(a8);
var breakIndex = [];
for(var i=0;i<ay.length;i++ ){
if ( ay[i].status==-1){
breakIndex.push(i);
}
}
if ( breakIndex.length >0) {
for(var i=0;i<breakIndex.length;i++){
if ( (i-1) >= 0 ){
if ( (breakIndex[i - 1]+1) == breakIndex[i] ) {
continue;
}
console.info("["+ ( breakIndex[i - 1] +1 )+" : "+ ( breakIndex[i] -1 )+"]");
}
else{
console.info( "--2--" );
if ( breakIndex[0] != 0 )
console.info("[0 : "+ ( breakIndex[0]-1 ) +"]");
}
}
if( breakIndex[breakIndex.length-1] < (ay.length-1 )) {
console.info("["+ ( breakIndex[breakIndex.length-1]+1 ) +" : "+ (ay.length-1)+ "]");
}
} else {
console.info("[0 : "+ ( ay.length -1 )+"]");
}
</script>
<body>
</body>
</html>
一个真实的应用场景:在Extjs4 对store里面的数据进行分割
function createStore(container,datastore,beginIndex ,endIndex ) {
var rs = datastore.getRange( beginIndex ,endIndex ) ;
if ( rs ) {
var s = Ext.create('Ext.data.ArrayStore', { model : 'ShiftOutput' });
s.add(rs);
container.push( s );
}
}
var storeArray = [] ;
var breakIndex = [];
for(var i=0; i < store.data.items.length; i++ ){
if ( store.data.items[i].data['status'] == -1 ){
brakIndex.push(i);
}
}
if ( breakIndex.length > 0 ) {
for(var i=0;i<breakIndex.length;i++){
if ( (i-1) >= 0 ){
if ( (breakIndex[i - 1]+1) == breakIndex[i] ) {
continue;
}
createStore( storeArray , store, breakIndex[i-1]+1 ,breakIndex[i]-1 );
} else {
if ( breakIndex[0] != 0 ) {
createStore( storeArray , store, 0 , breakIndex[0]-1 );
}
}
}
if( breakIndex[ breakIndex.length - 1 ] < ( store.data.items.length - 1 ) ) {
createStore( storeArray , store, breakIndex[breakIndex.length-1]+1 , store.data.items.length-1);
}
} else {
createStore( storeArray , store, 0, store.data.items.length-1);
}