我想按字母顺序生成唯一的字母键|angularJs



我想按字母顺序生成键,以

啊啊

啊啊

然后下一个将是aaaab,到达aaaaz后应该aaaba字符串,然后aaabb,依此类推,以便正确生成键

我要创建的示例 JSON

 var keygen={aaaaa,
             aaaab,
             aaaac .........aaaaz,aaaba ....}

我的JavaScript

$scope.doKeyGen=function(lastValueInJSON)
                {  // Do something 
                   }

这将为你工作。JS小提琴在这里。

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

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

 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");

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

请注意,我只假设小写字母键。 并使用 3 长度字符串 (aaa(,您也可以使用 4 长度,但性能会下降。

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

你可以使用这个

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);

最新更新