Javascript - 具有所有可能组合的字节字符串

标签 javascript

我有一个带有字节的字符串(“00001011”),现在我想得到一个数组,其中包含 1 个(事件)“位”的所有可能组合,也作为“字节串” 所以从

var bString = "00001011";//输出字符串

到一个包含所有字符串的数组,其中包含此“字节字符串”的所有可能组合,例如 - “00000001”、“00000011”、“00000010” 等等

这可能吗?

提前谢谢你

最佳答案

function combinations( input ){
   var number = parseInt( input, 2 );
   var combinations = [];
   var zeroes = (new Array(input.length)).join(0);
   for(var i=1;i<=number;i++){
     if((i&number) == i){ combinations.push( i ) }
   }
   return combinations.map( function(dec){
      return  (zeroes + dec.toString(2)).substr( -zeroes.length-1 );
   });
}

http://jsfiddle.net/jkf7pfxn/3/

console.log( combinations("00001011") );
// ["00000001", "00000010", "00000011", "00001000", "00001001", "00001010", "00001011"]

思路如下:迭代从 1 到输入数字的所有数字。如果当前数字 AND 输入数字返回当前数字,则两者在同一位置都有 1 位。

在较小的数字上,“0101”(即 5),它的工作方式如下:

1 & 5 == 1, (0001 & 0101) 将 1 推到匹配项.

2 & 5 == 0, (0010 & 0101) 不匹配。

3 & 5 == 1, (0011 & 0101) 不匹配。

4 & 5 == 4, (0100 & 0101) 将 4 推送到比赛。

5 & 5 == 5, (0101 & 010 1) 将 5 推送到匹配项。

所以 0101 的组合是 1 (0001), 2 (0010)、4(0100)和5(0101)。

然后有这个用零填充数字的小技巧:

var zeroes = (new Array(input.length)).join(0); // gives a long enough string of zeroes

然后

 // convert to base 2, add the zeroas at the beginning, 
 // then return the last n characters using negative value for substring
 return (zeroes + dec.toString(2)).substr( -1 * zeroes.length);

关于Javascript - 具有所有可能组合的字节字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433977/

相关文章:

javascript - 我想创建一个 chrome 扩展来获取页面中的所有链接并显示它们。

c# - Ajax 不进行函数调用

javascript - 以编程方式访问 Sencha Touch 2 列表点击处理程序中的 hasMany 关联

javascript - 缓存 Javascript/jquery 事件

javascript - 对对象数组中的对象使用 ng-options

javascript - JSON.parse()。访问数据并使用它来填充 dom

javascript - 将对象的子数组插入父数组

javascript - SailsJS 在创建具有关联的对象时触发更新

javascript - Cypress :找不到模块:错误:无法解析'cypress/types/lodash

javascript - 带有上一个、暂停和下一个按钮的 JS 文本循环