首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想按字母顺序生成唯一的字母键

问我想按字母顺序生成唯一的字母键
EN

Stack Overflow用户
提问于 2017-05-10 08:41:19
回答 3查看 184关注 0票数 3

我希望生成按字母顺序排列的键,使其开始于

aaaaa

然后下一个是aaaab,在到达aaaaz之后,字符串应该是aaaba,然后是aaabb等等,这样键就能正确地生成

我要创建的示例JSON

代码语言:javascript
复制
 var keygen={aaaaa,
             aaaab,
             aaaac .........aaaaz,aaaba ....}

我的javascript

代码语言:javascript
复制
$scope.doKeyGen=function(lastValueInJSON)
                {  // Do something 
                   }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-10 10:28:35

这对你有用。JS Fiddle来了

https://jsfiddle.net/3d789okv/7/

确保你最后的价值会被击中。否则,你将进入无限循环地狱。还可以在调用getNext()中配置字母数。但是,请确保在第一个值和"aaaaa“和最后一个值"asxas”中设置相同数量的字母。

代码语言:javascript
复制
 String.prototype.replaceAt=function(index, replacement) {
        return this.substr(0, index) + replacement+ this.substr(index + replacement.length);
    }

 var json = [];
 function getNext(charCount,lastValue){
    changeIndex = charCount -1;
   var newValue = "";
     while (changeIndex >= 0){
        if(lastValue[changeIndex] !== "z"){
           var changed = lastValue[changeIndex];
           var replacechanged = String.fromCharCode(changed.charCodeAt(0)+1);
           newValue = lastValue.replaceAt(changeIndex,replacechanged)
           for(var j=changeIndex+1; j < charCount; ++j){
              newValue = newValue.replaceAt(j,"a");
           }
           return newValue;
         }
         changeIndex--;
      }
 }

 function createJSON(lastValue){
    if(!json.length){
      //var startPrefix = "aaaaa";
      json.push("aaaaa");
      while(lastValue !== json[json.length-1]){

         json.push(getNext(5,json[json.length-1]));
      }
      console.log(json);
    }
 }

 createJSON("aaabz");
票数 1
EN

Stack Overflow用户

发布于 2017-05-10 10:29:16

您需要使用递归函数来生成密钥。我在这个fiddle link中编写了一些代码,它根据您的需求生成密钥,并创建JSON。

,请注意,,我只假定小写字母键。而使用3长字符串(aaa),也可以使用4长,但性能下降。

您可以更改任何第一个键的输入在附加小提琴,如'aay'然后代码生成下所有可能的键。

票数 1
EN

Stack Overflow用户

发布于 2017-05-10 10:58:40

你可以用这个

​

代码语言:javascript
复制
function getNextKey(lastKeyCode, changeIndex)
{
  var charCodes = [];
  if( changeIndex == undefined )
      changeIndex = lastKeyCode.length - 1;


  if(changeIndex - 1 > -1 && lastKeyCode.charCodeAt(changeIndex) == 122 )
  {
     lastKeyCode = getNextKey(lastKeyCode, changeIndex - 1);
  }

  lastKeyCode.split('').forEach(function(e){charCodes.push(e.charCodeAt())});
  charCodes[changeIndex] = 97 + (charCodes[changeIndex] - 96 ) % 26;

  return String.fromCharCode.apply(0, charCodes);
}

  //-------------------EDIT ( GENERATE KEYS LIKE THIS )------------
function generateKeys(lastKey)
{
  var json = [];
  var nextKey = new Array(lastKey.length + 1 ).join('a');
  json.push(nextKey);

  while( nextKey != lastKey )
  {
    json.push( (nextKey = getNextKey(nextKey)) )
  }

  return json;
}
  //---------------------------Example----------------------------


var last = 'test';
console.log('Last Key : '+last+' | Generated key length : '+generateKeys(last).length);

​

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43887475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档