使用javascript在数组中组合单词
假设我有一个数组['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 我是初学者,以下是我写的:使用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
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');