javascript - 如何将数字值转换为数组中具有单独值的数组,其中列表中索引的最大值为 1

标签 javascript arrays arraylist

需要一些帮助。

我有示例值 4.8(这是来自评分 4.8/5 的值)

现在我需要把它转换成数组,数组应该是这样的

[1, 1, 1, 1, 0.8]

我是什么意思?它应该取值并组成包含 5 个元素的数组,但每个索引不应超过 1。

其他例子:

2.8 应该是 [1, 1, 0.8, 0 ,0]

0.5 应该是 [0.5, 0, 0, 0, 0]

5 应该是 [1, 1, 1, 1, 1]

3 应该是 [1, 1, 1, 0, 0]

等...

let number = 4.8;

最佳答案

您可以通过将长度设置为 5 来使用 Array.from()。每次取 num - i 或 1 的 0 和最大值之间的最小值:

const convert = num => Array.from({ length: 5 }, 
  (_, i) =>  Math.max(Math.min(num - i, 1), 0)
)

console.log(convert(4.5))
console.log(convert(2.5))
console.log(convert(0.5))
console.log(convert(5))

如果精度是个问题,我添加了一个 safeSubtract 函数来处理:

const safeSubtract = (n, i) => {
  const [int, dec = ''] = String(n).split('.')
  return +`${+int - i}.${dec}`
};

const convert = num => Array.from({ length: 5 }, 
  (_, i) =>  Math.max(Math.min(safeSubtract(num, i), 1), 0)
)

console.log(convert(4.8))
console.log(convert(2.8))
console.log(convert(0.8))
console.log(convert(5))

关于javascript - 如何将数字值转换为数组中具有单独值的数组,其中列表中索引的最大值为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56560759/

相关文章:

c++ - C++ 中非常大的数组的内存问题

c++ - 关于对象数组中的析构函数

android - 如何将 ArrayList 数据设置到 ListView 中?

javascript - 浏览器错误 'Uncaught TypeError: undefined is not a function '

javascript - Tablesorter自定义过滤器功能 - 全表过滤器

javascript - Jasmine spy jquery

java - hibernate -> ArrayList 无法转换为 Set

javascript - 在特定日期输入中隐藏 JQuery 日期选择器中的日期

arrays - ngFor 指令是否会在每次突变时重新渲染整个数组?

java - 比较 2 个数组列表之间的值