let arr = [
{ id: 1, test: 6 }, // 生成6列数据
{ id: 2, test: 4 }, // 生成4列数据
{ id: 3, test: 5 }, // 生成5列数据
]
test的之和为15;
假如我总数为29,
生成15个框(根据test的之和15就生成15个框)的数据:如下图()
下面写的这个方法:在第14个框的值为27-29之间的数据,第15个框的值为负数了,请问这个方法能优化下吗?或者还有其他方法吗?
function filterate(arr, num = 29) {
let count = list.reduce((n, i) => n + Number(i.test), 0)
let step = Math.ceil(num / count);
let data = arr.map((item, index) => {
return Array.from({length: Number(item.test)}).map(citem => {
return {
min: 0,
max: 0,
num: 0,
}
})
})
let max = Math.max(...list.map(i => Number(i.test)));
let value = 0;
let current = 1;
for (let index = 0; index < max; index++) {
data.forEach((item, k) => {
if(item[index]){
item[index].min = value + 1
value += step
if(num < value + step){
value = num
}
item[index].max = num < value + step ? num : value
item[index].num= Math.floor(Math.random() * (item[index].max - item[index].min + 1)) + item[index].min
}
})
}
return data;
}
你中间的
if(num < value + step){value = num}
改变了value的值