一个JavaScript 对象数组,
obj(i,test)
obj1(1,4)
obj2(1,4)
obj3(null,5)
obj4(null,5)
obj5(null,5)
obj6(1,7)
obj7(2,9)
obj8(2,49)
obj9(2,89)
obj10(2,80)
按照数组的第一属性 i,按照i的值相同分割,
obj1(1,4)
obj3(null,5)
obj4(null,5)
obj7(2,9)
obj8(2,49)
obj9(2,89)
obj10(2,80)
得到4个数组,
[code="javascript"]
function groupArray(ar){
var result = [];
if(!ar.length)return result;
var hash = {}
for(var k=0,l=ar.length; k<l; k++){
var obj = ar[k];
var group = hash[obj.i];
if(typeof(group)=="undefined"){
group = hash[obj.i] = [];
result.push(group);
}
group.push(obj);
}
return result;
}
[/code]
用一个Object当为HashMap, key=你的第一属性i,value=array
遍历原数组,对每个key去object里面找,找不到就put个arr进去,
然后往arr里面add东西
乍一看还以为楼主要的是group by的功能,但是仔细看给的例子和预期结果发现原来只是要判断相邻元素的关系(注意obj6(1, 7)跟前面的obj1、obj2不在一组里)。那只要简单的“折叠”一次就行:
[code="javascript"]function splitByI(arr) {
if (0 == arr.length) return arr
var result = [ [ arr[0] ] ]
var resultLen = 1
var lastI = arr[0].i
for (var i = 1; i < arr.length; i++) {
if (arr[i].i == lastI) result[resultLen - 1].push(arr[i])
else {
result.push([ arr[i] ])
lastI = arr[i].i
resultLen++
}
}
return result
}[/code]
[code="javascript"]
function groupArray(ar){
if(!ar.length)return [];
var hash = {}
for(var k=0,l=ar.length; k<l; k++){
var obj = ar[k];
if(!hash.hasOwnProperty(obj.i))hash[obj.i]=[];
hash[obj.i].push(obj);
}
var result = [];
for(var p in hash){
result.push(hash[p]);
}
return result;
}
[/code]