【问题标题】:word combination in an array using javascript使用javascript在数组中的单词组合
【发布时间】:2016-11-23 02:57:39
【问题描述】:

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

我想将它们组合起来,例如:

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

array[0] 的第一个字母是 A,并附加 array[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');

【问题讨论】:

  • 您的问题到底是什么?你的代码在哪里?你试过什么?
  • 那些不称为排列。也许问题比你想象的要容易。只需手动拼出您能想到的所有组合。
  • 听起来你需要写一些代码。您可以从编写“伪代码”开始,这是对算法的描述。
  • @Bergi 手动我能想到 - alexrobert(first name + last name), alexr(first name+ first word of last name), arobert(first word of first name + last name), alexsrobert (名字+中间名的第一个单词+姓氏)。假设我必须猜测一个叫 Alex Same Robert 的人的电子邮件地址。我可能会尝试以上组合 + gmail.com(或它们所属的任何域)

标签: javascript arrays permutation


【解决方案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();

【讨论】:

    【解决方案2】:

    您可以对可变长度的部件及其长度使用迭代和递归方法。

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

    【讨论】:

      【解决方案3】:

      这个问题可以用递归方法解决。

      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('first last') 将返回 ["last", "firstlast", "firstl", "flast", "fl", "first"]。

      【讨论】:

        【解决方案4】:

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

        假设

        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,我从 this 堆栈溢出答案中找到。

        你会做和以前一样的事情,除了你需要使用charAt并做类似的事情:

        名字+FirstLetterOfLastName:

        var output2 = array[0] + array[2].charAt(0);
        

        你可以用和以前一样的方法输出它。

        如果您仍然感到困惑,请发表评论,我会尽力回答您的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-14
          • 1970-01-01
          • 2010-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多