Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Thuật toán sắp xếp mảng số thành các tập hợp trong JavaScript

Cho mảng đối tượng:

const arr = [ 
  {'item1': 144}, {'item2': 0}, {'item3': 366}, 
  {'item4': 15}, {'item6': 366}, {'item7': 19}, 
  {'item8': 211}, {'item9': 121} 
];

Viết hàm phân cụm đối tượng vào 4 nhóm: 'XL', 'L', 'M', 'S' dựa trên độ lớn tương đối.

Ví dụ

const arr = [ 
  {'item1': 144}, {'item2': 0}, {'item3': 366}, 
  {'item4': 15}, {'item6': 366}, {'item7': 19}, 
  {'item8': 211}, {'item9': 121} 
]; 
const compareWithRange = (rangeArr, num) => { 
  for(let i = 0; i < rangeArr.length; i++){ 
    if(num <= rangeArr[i] && num > rangeArr[i + 1]){ 
      return i; 
    }; 
  }; 
  return rangeArr.length - 1; 
}; 
const groupBySize = (arr = []) => { 
  const mapping = arr => arr.map(el => el[Object.keys(el)[0]]); 
  const max = Math.max(...mapping(arr)); 
  const range = { 
    'XL': max, 
    'L': (max * 3) / 4, 
    'M': (max / 2), 
    'S': (max / 4) 
  }; 
  const legend = ['XL', 'L', 'M', 'S']; 
  const res = {}; 
  arr.forEach(el => { 
    const num = el[Object.keys(el)[0]]; 
    const index = compareWithRange(Object.keys(range).map(key => range[key]), num); 
    const size = legend[index]; 
    if(res.hasOwnProperty(size)){ 
      res[size].push(Object.keys(el)); 
    } else { 
      res[size] = [Object.keys(el)]; 
    } 
  }); 
  return res; 
}; 
console.log(groupBySize(arr));

Kết quả

Kết quả in ra console:

[ 
  M: [ ['item1'], ['item9'] ], 
  S: [ ['item2'], ['item4'], ['item7'] ], 
  XL: [ ['item3'], ['item6'] ], 
  L: [ ['item8'] ] 
]