实现效果
合并任意个字符串数组,并保持字符串原顺序进行合并去重,效果如图所示:
实现代码如下
先简单实现两个字符串数组之间的合并,再利用js的可变参数进行递归调用实现n个字符串数组的合并
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>龙哥</title>
</head>
<body>
<script type="text/javascript">
/**
* 按顺序合并n个字符串数组并去重
* @param {...any} strArrys // 多个字符字符串数组
*/
function mergeStrArrays(...strArrys) {
if (!strArrys) {
return [];
}
// 递归出口
if (strArrys.length < 2) {
return strArrys[0] ? strArrys[0] : [];
}
// 递归调用
return mergeStrArrays(mergeStrArray(strArrys.pop(), strArrys.pop()), ...strArrys);
}
/**
* 按顺序合并两个字符串数组并去重
* @param {Array} strArry1 字符串数组
* @param {Array} strArry2 字符串数组
* @returns
*/
function mergeStrArray(strArry1, strArry2) {
if (strArry2.length > strArry1.length) {
// 保证strArry1比strArry2长
let strT = strArry2;
strArry2 = strArry1;
strArry1 = strT;
}
for (let i = 0; i < strArry1.length; i++) {
if (strArry2[i] === undefined) {
break;
}
// 如果对应位置str1元素与str2元素不相同且str1数组中没有这个元素,则在该位置添加str2元素
if (strArry1[i] !== strArry2[i]) {
let j = 0;
for (j; j < strArry1.length; j++) {
if (strArry1[j] === strArry2[i]) {
break;
}
}
if (j >= strArry1.length) {
strArry1.splice(i, 0, strArry2[i]);
}
}
}
return strArry1;
}
let str1 = ["aaa", "bbb", "ccc", "ddd", "eee"]
let str2 = ["bbb", "ccc", "eee", "ffff"]
let str3 = ["bbb", "ccc", "mmm", "ggg"]
console.log("三个字符串数组分别为:");
console.log(str1);
console.log(str2);
console.log(str3);
console.log("合并后:");
console.log(mergeStrArrays(str1, str2, str3));
</script>
</body>
</html>