创建一个具有求和特定数字的数字的数组

时间:2019-07-04 10:37:29

标签: javascript arrays node.js

我想创建一个数组,该数组的位置总和给出特定的数字。

必须从数组的开头填充较大的数字,并在需要时填充为0,并尽可能分配相等。

例如,某些情况下的预期结果:

const array = new Array(4);
const number = 4;
// Expected result -> [1, 1, 1 ,1]
const array = new Array(5);
const number = 17;
// Expected result -> [4, 4, 3, 3 ,3]
const array = new Array(7);
const number = 2;
// Expected result -> [1, 1, 0, 0, 0, 0, 0]

使用Javascript获取此数组的最有效方法是什么?

请注意,示例中的数字很少。一个真实的示例将使用更大的数字,例如:

const array = new Array(52);
const number = 3215654;

关于可能的重复问题,此问题需要与其他用户指出的问题不同的结果顺序,因此此处的逻辑不可行。

4 个答案:

答案 0 :(得分:4)

出于好奇,我想尝试一下,这是我想出的:

const arrayLength = 5;
let number = 17;

const arr = [];
for(let i=arrayLength; i>0; i--){
  const n = Math.ceil(number/i);
  arr.push(n);
  number -= n;
}
console.log(arr);//[ 4, 4, 3, 3, 3 ]

将数字均等似乎是答案。

答案 1 :(得分:2)

您可以创建一个将两个约束作为参数的函数。 在该函数内部,您创建了一个简单的循环来遍历targetLength。

  • 计算targetVal的“偶数”部分。
  • 将该部分推到 结果数组。
  • 从targetValue中减去该部分。
  • 重复直到长度为0

一个简单的例子可能像这样:

function buildArray(length, target) {
    let result = [];
    for(; length > 0; length--) {
        let val = Math.ceil(target/length);
        result.push(val);
        target -= val;
    }
    return result;
}

buildArray(4, 4); // -> [1, 1, 1, 1]
buildArray(5, 17); // -> [4, 4, 3, 3, 3]
buildArray(7, 2); // -> [1, 1, 0, 0, 0, 0, 0]

修改: 根据您在编辑中提供的示例,结果应为

buildArray(52, 3215654); // ->[61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61840, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839, 61839]

答案 2 :(得分:1)

您可以为此使用array.map,这将为您提供预期的结果。

const count = 7;
const number = 6;

const array = [...(new Array(count)).keys()];

let result = array.map((v,index) => {
    return Math.floor(number / array.length) + (index < (number % array.length) ? 1:0) ;
});

console.log("Result: ", result);

答案 3 :(得分:0)

使用Array.fill创建一个填充零的数组,然后执行循环以放置值:

const arrayLength=5;
const number = 17;
var exArray=new Array(arrayLength).fill(0);
for(var i=0,j=0;i<number;i++,j++){
   if(j>=arrayLength) j=0;
   exArray[j]++;
}