我正在尝试在 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);
添加回答
举报
0/150
提交
取消