如何对项目进行分组,使其不超过JavaScript中的总量?
我有一个包含n个对象的数组。每个对象都有id、数量、价格和总数等名称。这些都对解决这一问题具有重要意义 如何创建其对象的所有如何对项目进行分组,使其不超过JavaScript中的总量?,javascript,Javascript,我有一个包含n个对象的数组。每个对象都有id、数量、价格和总数等名称。这些都对解决这一问题具有重要意义 如何创建其对象的所有total总和不超过150的新数组 我的阵列: let array = [{id: 1, quantity: 5, price: 10, total: 50}, {id: 2, quantity: 3, price: 100, total: 300}] array1 = [{id: 1, quantity: 5, price: 10, total: 50}, {id: 2
total
总和不超过150的新数组
我的阵列:
let array = [{id: 1, quantity: 5, price: 10, total: 50}, {id: 2, quantity: 3, price: 100, total: 300}]
array1 = [{id: 1, quantity: 5, price: 10, total: 50}, {id: 2, quantity: 1, price: 100, total: 100}]
array2 = [{id: 2, quantity: 1, price: 100, total: 100}]
array3 = [{id: 2, quantity: 1, price: 100, total: 100}]
预期结果:
let array = [{id: 1, quantity: 5, price: 10, total: 50}, {id: 2, quantity: 3, price: 100, total: 300}]
array1 = [{id: 1, quantity: 5, price: 10, total: 50}, {id: 2, quantity: 1, price: 100, total: 100}]
array2 = [{id: 2, quantity: 1, price: 100, total: 100}]
array3 = [{id: 2, quantity: 1, price: 100, total: 100}]
条件:
let array = [{id: 1, quantity: 5, price: 10, total: 50}, {id: 2, quantity: 3, price: 100, total: 300}]
array1 = [{id: 1, quantity: 5, price: 10, total: 50}, {id: 2, quantity: 1, price: 100, total: 100}]
array2 = [{id: 2, quantity: 1, price: 100, total: 100}]
array3 = [{id: 2, quantity: 1, price: 100, total: 100}]
total
s之和不得超过150total
的值必须始终是该对象中数量
和价格
的乘积数量
必须是整数const itemsFinals = [];
const maxTotal = 150;
let totalGroup = 0;
for (i = 0; i < itemComprobantes.length; i++) {
if((itemComprobantes[i].total + totalGroup) < maxTotal){
itemsFinals.push(itemComprobantes[i]);
totalGroup += itemComprobantes[i].total;
}
}
const itemsFinals=[];
常数maxTotal=150;
设totalGroup=0;
对于(i=0;i
让itemComprobantes=[
{id:1,数量:5,价格:10,总数:50},
{id:2,数量:1,价格:100,总计:100},
{id:3,数量:1,价格:100,总计:100},
{id:4,数量:1,价格:100,总计:30},
{id:5,数量:1,价格:100,总计:80}
]
const itemsFinals={}
常数maxTotal=150
设totalGroup=0
设群=1
对于(i=0;imaxTotal){
组+=1
totalGroup=0
}
if(itemsFinals['group'+group]==未定义){
itemsFinals['group'+group]=[]
}
itemsFinals['group'+group].push(itemComprobantes[i])
totalGroup+=itemComprobantes[i]。总计
}
log(itemsFinals)
这里有一种方法。我知道它很长,但是试试看
let数组=[{id:1,数量:5,价格:10,总计:50},{id:2,数量:3,价格:100,总计:300},{id:3,数量:5,价格:40,总计:200},{id:4,数量:2,价格:10,总计:20}];
常数maxTotal=150;
让新的_数组={};
设指数=0;
设最终_总数=0;
新的数组['array\'+index]=[];
for(数组的var obj){
最终总额+=目标总额;
while(最终总计>最大总计){
让超过_值=最终_总计-maxTotal;//350-150=200
让保留数量=parseInt((obj.total-超过值)/obj.price);/(300-200)/100=2
剩余数量=对象数量-保留数量;
如果(保留数量!=0){
retain_obj=Object.assign({},obj);
保留对象数量=保留对象数量;
保留对象总计=保留数量*对象价格;
新的数组[“数组”+索引]。推送(保留对象);
}
索引++;
新的数组['array\'+index]=[];
new_obj=Object.assign({},obj,{数量:剩余_数量,合计:剩余_数量*obj.price})
新建数组[“数组”+索引]。推送(新建对象);
//控制台日志(新的_obj);
obj=新的_obj;
最终合计=剩余数量*目标价格;
新建_数组['array_'+index].pop();//如果要再次重复循环
}
新建数组[“数组”+索引].push(obj);//打印新数量和剩余数量
}
console.log(新的\u数组)
为什么itemComprobantes[0]
不是itemComprobantes[i]
?这意味着每个循环都只需获取当前循环中数组的第一个元素
,也就是这个(itemComprobantes[0].total+totalGroup)
?这是否回答了您的问题?我们说的总量是每个对象的total
键还是数组中元素的总数?您的totalGroup
不应该只添加total
键,而不是像这样添加整个对象吗totalGroup+=itemComprobantes[i]。total
?谢谢,但是没有达到预期的结果。您能详细说明您的问题吗?为什么在您的代码段中,maxTotal
是150
,而您问题中的第一个代码段是总共350
let array=[{id:1,数量:5,价格:10,总计:50},{id:2,数量:3,价格:100,总计:300}]
每个数组的总和不能超过150,如果超过,则添加到下一个数组中。我想OP希望您在第一个代码段中输入数据,并获得第二个代码段的结果