需求:
var arr = [{ a: 1 }, { b: 2 }, { c: 3 }, { a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }, { a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }, { e: 5 }];
/**方案一
* 获取某个属性值
* @param {[string]} atr [属性名]
* @param {[arr]} arr [description]
* @return {[arr]} [返回的数组值]
*/
// function getAtWith(atr, arr) {
// var arr1 = [],at = [];
// for (var i = 0, g; g = arr[i]; i++) g.a && arr1.push(i);
// for (var i = 0, g; g = arr1[i], n = arr1[i + 1], i < arr1.length; i++)if (typeof n != "undefined") at.push(arr.slice(g, n)); else at.push(arr.slice(g));return at;
// }
/**方案二
* 获取某个属性值
* @param {[string]} atr [属性名]
* @param {[arr]} arr [description]
* @return {[arr]} [返回的数组值]
*/
function getAtWith(atr, arr) {
var arr1 = [],at = [];
for (var i = 0, g; g = arr[i]; i++) g.a && arr1.push(i)&& arr1.length > 1 && at.push(arr.slice(arr1[arr1.length - 2], i));
arr1.length && at.push(arr.slice(arr1[arr1.length - 1]));
return at;
}
console.log("我是处理之后的数组",getAtWith('a', arr));
function getAtWith(atr, arr) {
var arr1 = [],at = [];
for (var i = 0, g; g = arr[i]; i++) g.a && arr1.push(i)&& arr1.length > 1 && getO(arr.slice(arr1[arr1.length - 2], i),at,{});
arr1.length && getO(arr.slice(arr1[arr1.length - 1]),at,{});
function getO(narr,at,obj){
for(var j=0,g;g=narr[j],j<narr.length;j++) for(let i in g) obj[i]=g[i];at.push(obj);
}
return at;
}
console.log("我是处理之后的数组",getAtWith('a', arr));
其中对象合并可以采用object.assign