假设有以下数组对象:

let items = [
  { name: 'item1', weight: 2, selected: false },
  { name: 'item2', weight: 3, selected: false },
  { name: 'item3', weight: 1, selected: false },
  { name: 'item4', weight: 4, selected: false }
];

可以先按照 weight 属性排序:

items.sort((a, b) => a.weight - b.weight);

然后设置一个变量表示已选中的赠品数量和已选中的赠品总重量:

let selectedCount = 0;
let selectedWeight = 0;

接着使用 for 循环逐一勾选 selected 属性为 false 的对象,直到已选满总赠送件:

for (let i = 0; i < items.length; i++) {
  if (!items[i].selected) { // 如果当前对象未被选中
    if (selectedCount + 1 <= totalGiftCount && selectedWeight + items[i].weight <= totalGiftWeight) { // 如果加上当前对象后未超出总赠送件和总重量
      items[i].selected = true; // 勾选当前对象
      selectedCount++; // 记录已选中的赠品数量
      selectedWeight += items[i].weight; // 记录已选中的赠品总重量
    } else {
      break; // 如果加上当前对象后超出总赠送件或总重量,退出循环
    }
  }
}

其中,totalGiftCount 和 totalGiftWeight 表示总赠送件和总重量

js中数组对象按照weight顺序逐一勾选selected勾选至选满总赠送件

原文地址: http://www.cveoy.top/t/topic/eB4X 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录