根据名称查找组合

我正在尝试在 JavaScript 中创建一个函数,给定一个字符串将返回一个包含所有名称组合的数组,例如。


 Name As per ITD - Potter Harry James 

                   Potter Harry 

                   Harry Potter

                   Harry James Potter

下面的代码也给出了组合,但以这种方式:


 Name As per ITD - Potter Harry 

                   Potter James 

                   Potter

                   Potter Harry James 

                   Harry James 

                   Harry 

                   James 

代码 :


var PanName = "Harry James Potter";

var ret = PanName.split(" ").reduce(function(ret, el, i, arr) {

  var n = arr.slice(++i);

  [2, 3].forEach(function(c) {

    ret = ret.concat(n.map(function(_, i) {

      return [el].concat(n.slice(i)).slice(0, c).join(' ');

    }));

  });

  if (i === arr.length - 1) ret.pop();

  return ret;

}, []);

var arr = ret.toString().split(",");

arr = arr.map(function(el) {

  return el.trim();

});


arr = arr.filter(function(item, index, inputArray) {

  return inputArray.indexOf(item) == index;

});

var i;

var text1 = "";

for (i = 0; i < arr.length; i++) {

  text1 += arr[i] + "<br>";

}

$('#displayCombinationNames').html(text1);

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<p id="displayCombinationNames"></p>

谁能帮我得到下面的输出:

预期输出:

Name As per ITD - Potter Harry James 
                  Potter Harry 
                  Harry Potter
                  Harry James Potter


慕桂英3389331
浏览 59回答 1
1回答

幕布斯7119047

您可以通过将只有名字和姓氏的名称分别处理更长的情况来做到这一点。对于第一种情况,结果只是一个first last和的数组last first。对于后一种情况,结果包括这些值,但也包括第一个后面的中间名:var PanName = "Harry James Potter";var arr = PanName.split(' ');var ret;if (arr.length == 2) {&nbsp; ret = [arr.join(' '), arr.reverse().join(' ')];} else {&nbsp; ret = [arr.join(' ')];&nbsp; first = arr.shift();&nbsp; last = arr.pop();&nbsp; ret.push([first, last].join(' '), [last, first].join(' '));&nbsp; ret.push([last, first, arr].join(' '));}console.log(ret);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript