为了账号安全,请及时绑定邮箱和手机立即绑定

根据名称查找组合

根据名称查找组合

慕桂英3389331 2022-10-27 14:10:39
我正在尝试在 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
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您可以通过将只有名字和姓氏的名称分别处理更长的情况来做到这一点。对于第一种情况,结果只是一个first last和的数组last first。对于后一种情况,结果包括这些值,但也包括第一个后面的中间名:


var PanName = "Harry James Potter";

var arr = PanName.split(' ');

var ret;


if (arr.length == 2) {

  ret = [arr.join(' '), arr.reverse().join(' ')];

} else {

  ret = [arr.join(' ')];

  first = arr.shift();

  last = arr.pop();

  ret.push([first, last].join(' '), [last, first].join(' '));

  ret.push([last, first, arr].join(' '));

}

console.log(ret);


查看完整回答
反对 回复 2022-10-27
  • 1 回答
  • 0 关注
  • 57 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信