编辑:输出应该是t1h2i3s4oneislong
我正在尝试编写一个返回一个新单词的函数,将正在传递该函数的 2 个单词中的字母组合在一起。如果 word1 是 hello 并且 word2 是 12345,它应该返回 h1e2l3l4o5 - 混合两个单词的所有字母。问题是,如果一个单词比另一个单词长,我就会得到未定义未定义未定义等。
我想我可以问的是word1.长度
有人可以解释为什么这不起作用(我正在学习)以及如何让它工作吗?谢谢!!
function creatingWord(one,two){
var string="";
if (one.length==1 &&two.length==1){
string=one+two;
}
else if (one.length==two.length){
for (var i=0; i<one.length;i++){
string+=one[i];
string+=two[i];
}
}
else if (one.length>two.length){
for (var j=0; j<one.length;j++){
string+=one[j];
string+=two[j];
}
}
return string;
}
var result = creatingWord('thisoneislong', '1234');
result;
我认为这里有两个可能的答案,具体取决于您希望输出的内容。
这段代码给你输出"t1h2i3s4oneislong"(一旦另一个用尽,继续使用较长的单词):
function creatingWord(one, two){
var output = "";
for (var i = 0; i < Math.max(one.length, two.length); i++) {
if (one.length > i) {
output += one[i];
}
if (two.length > i) {
output += two[i];
}
}
return output;
}
这是一个给出输出"t1h2i3s4"的版本(截断为较小的单词):
function creatingWord(one, two){
var output = "";
for (var i = 0; i < Math.min(one.length, two.length); i++) {
output += one[i] + two[i];
}
return output;
}
编辑:
回答下面的评论,这是一个采用可变数量参数的版本:
// takes a variable number of words
function creatingWord() {
var output = "";
var words = Array.prototype.slice.call(arguments);
var maxLength = 0;
for (var i = 0; i < words.length; i++) {
var word = words[i];
if (word.length > maxLength) {
maxLength = word.length;
}
}
for (var i = 0; i < maxLength; i++) {
for (var j = 0; j < words.length; j++) {
var word = words[j];
if (word.length > i) {
output += word[i];
}
}
}
return output;
}
使用第一个单词的长度作为输出长度,我们可以使用以下方法来组合您的问题中所述的任何单词列表:
var zip = array => array[0].map((a, i) => array.map(a => a[i]));
var words = ["aaaa", "bbb", "cc", "d", "........"],
combined = zip(words.map(w => w.split(""))).map(a => a.join("")).join("");
console.log(combined); // abcd.abc.ab.a.
你可以拆分你的单词来使用数组函数,如reduce()
,代码看起来更干净:
let a = 'HelloWorld';
let b = '_____';
let combineWords = (a,b) => b.split('') &&
a.split('').reduce((prev, curr, i)=> prev += curr + (b[i] || ''),'');
console.log(combineWords(a, b));
console.log(combineWords(b, a));
请注意,combineWords(a, b)
将返回所有可能的组合,以a.length