给object数组进行排序(排序条件是每个元素对象的属性个数)

console.log(objArrSort([{attr1: 1, attr2: 2}, {}, {attr1: 1}]))

function objArrSort(waitArr) {
  var objLengthArr = [];
  for (var i = 0, len = waitArr.length; i < len; i++) {
    objLengthArr.push(getObjAttrNum(waitArr[i]));  //将对象数组每个对象的num放到新数组
 }
 //objLengthArr[2,0,1]

 return orderArr(waitArr, objLengthArr);

 function orderArr(arr, lenArr) {
  var sortArr = lenArr.slice(0).sort(),
  finishArr = [];
	//sortArr[0,1,2]
    for (var i = 0, len = sortArr.length; i < len; i++) {
      for (var leng = lenArr.length - 1; leng > -1; leng--) {
        if (lenArr[leng] > -1 && lenArr[leng] === sortArr[i]) {    //根据num进行匹配
          finishArr.push(arr[leng]);
          lenArr[leng] = -1;
          break;
        }
      }
    }
	return finishArr;
  }
  function getObjAttrNum(obj) {   //数组对象中的每个对象的长度
    var num = 0;
    for (var key in obj) {
      !obj.hasOwnProperty(key) || num++;
    } 
    return num;
  }
}

猜你喜欢

转载自blog.csdn.net/weixin_43271750/article/details/84663740