js处理数据?

let arr = [  
    {id: 1, test: 3},  
    {id: 2, test: 4},  
    {id: 3, test: 5},  
    {id: 4, test: 6},  
];  

// 最大值是1000
let num = 1000;
num是最大数为1000,然后根据arr数组里面的test的值之和(3+4+5+6)为18,
1000 / 18 = 55(求整数);

然后需要得到的格式排列的数据如下:

麻烦各位大佬帮忙看看,写了循环,排列的数据格式不对,双循环的排列按顺序的话要怎么写?

let arr = [  
    {id: 1, test: 3},  
    {id: 2, test: 4},  
    {id: 3, test: 5},  
    {id: 4, test: 6},  
];  

// 最大值是1000
let num = 1000;

let sumOfTests = arr.reduce((acc, cur) => acc + cur.test, 0); // 计算test的总和  
let numInputs = sumOfTests; // 根据test的总和确定输入框的数量  
let rangeStep = Math.floor(1000 / sumOfTests); // 每个输入框范围的增量  
  
let container = document.getElementById('input-container');  
  
for (let i = 0; i < numInputs; i++) {
    let inputRangeStart = (i * rangeStep) + 1; // 计算每个输入框的起始范围  
    let inputRangeEnd = inputRangeStart + rangeStep - 1; // 计算每个输入框的结束范围  
    let randomValue = Math.floor(Math.random() * (inputRangeEnd - inputRangeStart + 1)) + inputRangeStart; // 生成随机值  
  
    let input = document.createElement('input');  
    input.type = 'text';  
    input.value = randomValue; // 设置输入框的值为随机生成的值  
    input.readOnly = true; // 可选:使输入框只读  
  
    container.appendChild(input); // 将输入框添加到容器中  
    container.appendChild(document.createElement('br')); // 可选:在每个输入框后添加换行  
}

阅读 1.8k
1 个回答

https://segmentfault.com/q/1010000045130749 和这里一样

    // 将 600 分成 20 份,第一份为 1-30,第二份为 31-60
    num = 600;
    numPer = 30;
    res = Array.from({ length: num / numPer }, (_, i) => {
    return `${i * numPer + 1}-${(i + 1) * numPer}`;
    });
    arr = [
    { id: 1, test: 5 },
    { id: 2, test: 4 },
    { id: 3, test: 5 },
    { id: 4, test: 6 },
    ];
    // 根据 arr 将 res 分为四列,第一列有5个,包含 1-30、121-150、241-270、361-390、481-510
    result = Array.from({ length: 4 },()=>[]);
    // 需要注意第二列的个数,不能超过,放不下就顺延
    while (res.length) {
    for (let i = 0; i < result.length; i++) {
        if (arr[i]?.test > result[i]?.length) {
        result[i].push(res.shift());
        }
    }
    }
    console.log(result);
推荐问题