如何组合(迭代)2 个字符串,将每个字符串中不同长度的字母混合



编辑:输出应该是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

相关内容

最新更新