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

时间:2017-05-10 08:41:19

标签: javascript angularjs arrays json

我想按字母顺序生成密钥,使其以

开头
  

AAAAA

然后下一个是aaaab,在到达aaaaz之后,字符串应为aaaba然后aaabb,依此类推,以便正确生成密钥

我要创建的示例JSON

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

我的javascript

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

3 个答案:

答案 0 :(得分:1)

这对你有用。 JS Fiddle就在这里。

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

确保您获得的最后一个值将被命中。 否则你将陷入无限循环地狱。 您还可以配置getNext()调用中的字母数。 但请确保在第一个值中设置相等数量的字母,并且“aaaaa”和最后一个值“asxas”

listCountries = ['France', 'Spain', 'United Kingdom', 'Italy', 'Portugal', 'Ireland', 'Poland', 'Norway']

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

您可以使用此

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