js中数组对象按照weight顺序逐一勾选selectedsendNum为数量勾选至选满总赠送件
以下是一种可能的解决方案:
function selectByWeight(arr, sendNum) {
// 按照weight字段排序
arr.sort((a, b) => a.weight - b.weight);
// 初始化选中件数和已选数组
let selectedNum = 0;
let selectedArr = [];
// 逐一勾选直至选满总赠送件
for (let i = 0; i < arr.length; i++) {
if (selectedNum >= sendNum) {
break;
}
arr[i].selected = true;
selectedNum++;
selectedArr.push(arr[i]);
}
// 如果还没选满总赠送件,继续按照weight字段从小到大勾选
if (selectedNum < sendNum) {
for (let i = 0; i < arr.length; i++) {
if (selectedNum >= sendNum) {
break;
}
if (!arr[i].selected) {
arr[i].selected = true;
selectedNum++;
selectedArr.push(arr[i]);
}
}
}
return selectedArr;
}
使用示例:
const arr = [
{ name: 'a', weight: 2 },
{ name: 'b', weight: 1 },
{ name: 'c', weight: 3 },
{ name: 'd', weight: 4 },
{ name: 'e', weight: 2 }
];
const selectedArr = selectByWeight(arr, 3);
console.log(selectedArr);
// 输出:
// [
// { name: 'b', weight: 1, selected: true },
// { name: 'a', weight: 2, selected: true },
// { name: 'e', weight: 2, selected: true }
// ]
在上面的示例中,数组arr中有5个元素,按照weight字段排序后的顺序为[{ name: 'b', weight: 1 }, { name: 'a', weight: 2 }, { name: 'e', weight: 2 }, { name: 'c', weight: 3 }, { name: 'd', weight: 4 }]。我们需要选出3个元素作为赠品,因此调用selectByWeight(arr, 3)函数,返回的结果是一个数组,包含3个元素,它们是按照weight字段从小到大顺序勾选的。在返回的结果中,每个元素都多了一个selected字段,表示它是否被选中
原文地址: http://www.cveoy.top/t/topic/eB5q 著作权归作者所有。请勿转载和采集!