使用array.reduce方法将二进制数字数组转换为十进制

泰勒·莫拉莱斯(Tyler Morales)

我正在尝试在表示单个二进制值的数组上使用array.reduce。例如,二进制的[1,0,1]将转换为十进制的5。

我已经可以使用while循环在二进制和十进制之间进行成功转换,但是我想升级我的代码以使用reduce方法。

到目前为止,我实现的是数组中最多6个元素的精确度。我不知道为什么,但是经过6位数,转换失败。

另外,我正在使用公式进行转换。例如:要将111001转换为十进制,您必须要做(1 * 2 ^ 5)+(1 * 2 ^ 4)(1 * 2 ^ 3)+(0 * 2 ^ 2)+(0 * 2 ^ 1)+(1 * 2 ^ 0)。

const getDecimalValue = function (head) {

     let total = head.reduce(
         (sum) =>
         sum + (head.shift() * Math.pow(2, head.length))
     )
     return total
}

console.log(getDecimalValue([1, 0, 1]) == 5)
console.log(getDecimalValue([1, 1, 1, 0, 0, 1]) == 57)
console.log(getDecimalValue([1, 1, 1, 0, 0, 1, 1]) == 115)
console.log(getDecimalValue([0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0]) == 7392)
console.log(getDecimalValue([1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0]) == 18880)

这是我使用while循环的代码

    let sum = 0
    while ((i = head.shift()) !== undefined) {
        sum += (i * Math.pow(2, head.length))
        console.log(i * Math.pow(2, head.length))
    }
    return sum
VLAZ

问题是您要像在数组reduce上迭代那样对数组进行变异这将更改下面的数组,因此该操作与基础值不同步。这是(reduce通常有些松散的)数组正常移动的示意图

arr =       [1, 2, 3]
             ^  ^  ^
             |  |  |
iteration 1 --  |  |
iteration 2 -----  |
iteration 3 --------        

在每次迭代中修改它时,都会发生以下情况:

//start
arr =       [1, 2, 3]

//at iteration 1
            [2, 3] _
             ^
             |
iteration 1 --

//at iteration 2
            [3] _ _
                ^
                |
iteration 2 -----

//at iteration 3
            [] _ _
                 ^
                 |
iteration 3 ------        

相反,获得功能的直接方法是使每个项目的幂为2,该幂等于项目反向索引

//index:            0   1   2   3
arr =              [1,  0,  1,  0]
//reverse index:    3   2   1   0

方便地做到这一点,您只需1要从数组长度中减去(因为indeces基于0,而length = 1仅具有index = 0),然后减去正态索引。这将为您提供两个代表每个值的幂:

//reverse index:    3   2   1   0
arr =              [1,  0,  1,  0]
//power of 2:       8   4   2   1
//multiply and sum: 8 + 0 + 2 + 0 = 10

这是使用的代码reduce

const getDecimalValue = function (head) {

     let total = head.reduce(
         (sum, item, index, array) =>
        sum + item * Math.pow(2, (array.length - index - 1)),
// reverse index                  ^^^^^^^^^^^^^^^^^^^^^^^^
        0
     )
     
     return total
}

console.log(getDecimalValue([1, 0, 1]) == 5)
console.log(getDecimalValue([1, 1, 1, 0, 0, 1]) == 57)
console.log(getDecimalValue([1, 1, 1, 0, 0, 1, 1]) == 115)
console.log(getDecimalValue([0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0]) == 7392)
console.log(getDecimalValue([1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0]) == 18880)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么将十进制转换为二进制的递归方法比使用,返回字符串的迭代方法要快?

来自分类Dev

如何在Java中从二进制转换为十进制(使用android studio)

来自分类Dev

使用Java从32位二进制补码转换为十进制

来自分类Dev

我的代码使用数组从十进制转换为二进制有什么问题

来自分类Dev

使用递归将二进制数字的字符串转换为十进制数字...

来自分类Dev

使用每个二进制数将二进制转换为数组

来自分类Dev

一个Java控制台程序,无需使用预定义的方法即可将十进制转换为二进制

来自分类Dev

我可以使用什么程序将文本转换为二进制数字?

来自分类Dev

使用python可视化将十进制转换为二进制

来自分类Dev

如何使用堆栈在C编程中将十进制转换为二进制

来自分类Dev

我正在使用C ++应用程序将二进制转换为十进制数字

来自分类Dev

如何使用Numpy创建给定无符号整数的二进制数字数组?

来自分类Dev

如何使用for循环将二进制转换为十进制?

来自分类Dev

使用c ....中的字符串将十进制转换为二进制...陷入某些概念错误

来自分类Dev

使用python将十六进制十进制数字转换为十进制

来自分类Dev

为什么将十进制转换为二进制的递归方法比使用,返回字符串的迭代方法要快?

来自分类Dev

使用CharAt()和length()将二进制转换为十进制

来自分类Dev

DataGrid单元格-将十进制和二进制数字转换为六进制

来自分类Dev

使用递归的十进制到二进制转换

来自分类Dev

如何使用<bitset>库将二进制转换为十进制?

来自分类Dev

使用递归将二进制数字的字符串转换为十进制数字...

来自分类Dev

如何在python中使用STACK将十进制数转换为二进制数

来自分类Dev

我可以使用什么程序将文本转换为二进制数字?

来自分类Dev

如何通过使用python中的重复除法将十进制转换为二进制

来自分类Dev

添加二进制数而不转换为十进制或使用内置函数

来自分类Dev

一个Java控制台程序,无需使用预定义的方法即可将十进制转换为二进制

来自分类Dev

使用python中的函数将十进制数转换为二进制数

来自分类Dev

如何使用二进制补码手动将十六进制转换为十进制

来自分类Dev

如何使用递归函数将十进制数转换为二进制数?

Related 相关文章

  1. 1

    为什么将十进制转换为二进制的递归方法比使用,返回字符串的迭代方法要快?

  2. 2

    如何在Java中从二进制转换为十进制(使用android studio)

  3. 3

    使用Java从32位二进制补码转换为十进制

  4. 4

    我的代码使用数组从十进制转换为二进制有什么问题

  5. 5

    使用递归将二进制数字的字符串转换为十进制数字...

  6. 6

    使用每个二进制数将二进制转换为数组

  7. 7

    一个Java控制台程序,无需使用预定义的方法即可将十进制转换为二进制

  8. 8

    我可以使用什么程序将文本转换为二进制数字?

  9. 9

    使用python可视化将十进制转换为二进制

  10. 10

    如何使用堆栈在C编程中将十进制转换为二进制

  11. 11

    我正在使用C ++应用程序将二进制转换为十进制数字

  12. 12

    如何使用Numpy创建给定无符号整数的二进制数字数组?

  13. 13

    如何使用for循环将二进制转换为十进制?

  14. 14

    使用c ....中的字符串将十进制转换为二进制...陷入某些概念错误

  15. 15

    使用python将十六进制十进制数字转换为十进制

  16. 16

    为什么将十进制转换为二进制的递归方法比使用,返回字符串的迭代方法要快?

  17. 17

    使用CharAt()和length()将二进制转换为十进制

  18. 18

    DataGrid单元格-将十进制和二进制数字转换为六进制

  19. 19

    使用递归的十进制到二进制转换

  20. 20

    如何使用<bitset>库将二进制转换为十进制?

  21. 21

    使用递归将二进制数字的字符串转换为十进制数字...

  22. 22

    如何在python中使用STACK将十进制数转换为二进制数

  23. 23

    我可以使用什么程序将文本转换为二进制数字?

  24. 24

    如何通过使用python中的重复除法将十进制转换为二进制

  25. 25

    添加二进制数而不转换为十进制或使用内置函数

  26. 26

    一个Java控制台程序,无需使用预定义的方法即可将十进制转换为二进制

  27. 27

    使用python中的函数将十进制数转换为二进制数

  28. 28

    如何使用二进制补码手动将十六进制转换为十进制

  29. 29

    如何使用递归函数将十进制数转换为二进制数?

热门标签

归档