使用javascript在数组中组合单词

使用javascript在数组中组合单词,javascript,arrays,permutation,Javascript,Arrays,Permutation,假设我有一个数组['Alex','Sam','Robert'] 我想把它们结合起来,比如: 获取第一个数组[0]并附加数组[2],该数组将被删除 数组[0]的第一个字母是A,并用数组[2]追加,即Robert,它将是ARobert 取数组[0],它是Alex,并附加数组[2]的第一个字母,即R,它将是AlexR 将第一个数组[0]与数组[1]的第一个字母一起追加,数组[2]将成为AlexSRobert 基本上,整个想法是当有人输入名字,中间名和姓氏,我应该能够作出组合,猜测电子邮件ID。例如-J

假设我有一个数组['Alex','Sam','Robert']

我想把它们结合起来,比如:

获取第一个数组[0]并附加数组[2],该数组将被删除

数组[0]的第一个字母是A,并用数组[2]追加,即Robert,它将是ARobert

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

将第一个数组[0]与数组[1]的第一个字母一起追加,数组[2]将成为AlexSRobert

基本上,整个想法是当有人输入名字,中间名和姓氏,我应该能够作出组合,猜测电子邮件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');
var name组合=函数(名称){
var counting=name.split(“”);

对于(var i=0;i我假设您需要一个函数来实现这一点?这里有一个函数来处理获取数组中每个索引的片段。我将让您自己来确定您需要什么类型的数据

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

好吧,不必写下每个组合,我会先做几个,让你知道:

假定

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;
您可以使用与以前相同的方法输出它


如果您仍然困惑,请留下评论,我将尝试回答您的问题。

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

函数组合(数组){
功能c(部分,索引){
数组[index].forEach(函数(a){
var p=部分混凝土(a);
if(p.length==array.length){
r、 推(p.join(“”));
返回;
}
c(p,指数+1);
});
}
var r=[];
c([],0);
返回r;
}
变量输入=['Johann'、'Sebastian'、'Bach'],
array=input.map(函数(a){return['',a[0],a];});
结果=组合(数组);

console.log(result);
这个问题可以使用递归方法解决

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');
上述函数可以为给定名称生成所有所需的组合


例如:名称组合(“first-last”)将返回[“last”、“firstlast”、“firstl”、“flast”、“fl”、“first”].

你的问题到底是什么?你的代码在哪里?你尝试了什么?这些不是所谓的排列。也许问题比你想象的要简单。只需手动拼出你能想到的所有组合。听起来你需要写一些代码。你可以从写“伪代码”开始,这是对算法的描述。@Bergi我能想到-alexrobert(名字+姓氏)、alexr(名字+姓氏的第一个字)、arobert(名字的第一个字+姓氏)、alexsrobert(名字+中间名的第一个字+姓氏)假设我要猜一个叫Alex Same Robert的人的电子邮件地址,我可以试试上面的组合+gmail.com(或他们所属的任何域名)
var output2 = array[0] + array[2].charAt(0);
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');