使用javascript在数组中的单词组合

时间:2016-07-20 03:07:27

标签: javascript arrays permutation

让我们说一下阵列[' Alex',' Sam'' Robert']

我希望将它们结合起来:

取第一个数组[0]并追加数组[2],这将是AlexRobert

数组[0]的第一个字母是A,附加数组[2]是罗伯特,将是ARobert

取数组[0]为Alex,并附加数组[2]的第一个字母,即R将是AlexR

将第一个数组[0]追加到数组[1]的第一个字母以及将成为AlexSRobert的数组[2]。

基本上,整个想法是当有人输入名字,中间名和&姓氏我应该能够组合并猜测电子邮件ID。例如,Juan F. Nathaniel的数组形式就像[' Juan',' F',' Nathaniel']

我想要像jaunn,jnathaniel,jaunfnathaniel这样的名字,中间名和姓氏的组合

我是初学者,这是我写的:

var nameCombination = function(name){

  var counting = name.split(" ");

  for (var i=0; i<counting.length; i++){
      console.log(counting[i] + counting[i+1]);
      console.log(counting[i].split("",1) + counting[i+1]);
      }

}

nameCombination('Alex Sam Robert');

4 个答案:

答案 0 :(得分:1)

我假设您需要一个功能来执行此操作?这是一个处理数组每个索引的抓取部分的函数。我会让你知道你需要什么类型的数据......

   var test = function() {
    var array = ['Alex', 'Sam', 'Robert'];

    var conditions = [{
            index: 0,
            length: array[0].length
        },
        {
            index: 1,
            length: 1
        },
        {
            index: 2,
            length: array[2].length
        }]

        alert(combine(array, conditions));
}

var combine = function(array, conditions) {
    var output = "";
    for(index in conditions) {
    var condition = conditions[index];
        var index = condition['index'];
        var length = condition['length'];
        output += array[index].substring(0, length);
    }
    return output;
}

test();

答案 1 :(得分:1)

您可以使用迭代和递归方法来获取可变长度的零件及其长度。

function combine(array) {
    function c(part, index) {
        array[index].forEach(function (a) {
            var p = part.concat(a);
            if (p.length === array.length) {
                r.push(p.join(''));
                return;
            }
            c(p, index + 1);
        });
    }

    var r = [];

    c([], 0);
    return r;
}

var input= ['Johann', 'Sebastian', 'Bach'],
    array = input.map(function (a) { return ['', a[0], a]; });
    result = combine(array);

console.log(result);

答案 2 :(得分:1)

可以使用递归方法解决此问题。

var combinations = function(names, i, n){

  if(i == n){
    return [];
  }
  last_names = combinations(names, i + 1, n);

  name_combinations = last_names.map(function(last_name){ 
    return [ 
      last_name,
      names[i] + last_name,
      names[i] + last_name[0],
      names[i][0] + last_name,
      names[i][0] + last_name[0]
    ]
  });
  name_combinations = [].concat.apply([], name_combinations);
  name_combinations.push(names[i]);
  return name_combinations;
};


var nameCombinations = function(name){
  var name_array = name.split(' ');
  return Array.from(new Set(combinations(name_array, 0, name_array.length)));
};

nameCombinations('first last');

上面的函数可以为给定的名称生成所有需要的组合。

例如:nameCombinations(&#39; first last&#39;)将返回[&#34; last&#34;,&#34; firstlast&#34;,&#34; firstl&#34;,&# 34; flast&#34;,&#34; fl&#34;,&#34; first&#34;]。

答案 3 :(得分:0)

好的,不写出每一个组合,我会先做几个给你的想法:

假设

array[0] is the person's first name 
array[1] is the person's middle name 
array[2] is the person's last name

姓+名字:

var output = array[0] + array [2];

姓+中间名:

var output1 = array[0] + array[1];

然后你可以使用innerHTML显示输出:

使用Javascript:

document.getElementById("output").innerHTML = output + '<br>' + output1;

HTML:

<div id="output"></div>

请记住,您需要继续为其余组合执行此操作。

现在,对于需要获取变量第一个字母的组合,您需要使用charAt堆栈溢出答案中的charAt

你会做与以前一样的事情,除非你需要使用var output2 = array[0] + array[2].charAt(0); 并做同样的事情:

姓+ FirstLetterOfLastName:

Oe.targetJSLoaded

您可以使用与以前相同的方法输出它。

如果你仍然困惑,请留下评论,我会尽力回答你的问题。