原文:请把两个数据合并为指定数组 - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/javascript/merge-two-data-specified/

题目描述:

请把俩个数组 [A1, A2, B1, B2, C1, C2, D1, D2] 和 [A, B, C, D],合并为 [A1, A2, A, B1, B2, B, C1, C2, C, D1, D2, D]。

解题:

  • 思路一:
function concatArr (arr1, arr2) {
  const arr = [...arr1];
  let currIndex = 0;
	for (let i = 0; i < arr2.length; i++) {
		const RE = new RegExp(arr2[i])
		while(currIndex < arr.length) {
			++currIndex
			if (!RE.test(arr[currIndex])) {
					arr.splice(currIndex, 0, a2[i])
					break;
				}
			}
		}
	return arr
}
var a1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
var a2 = ['A', 'B', 'C', 'D']
const arr = concatArr(a1, a2)
console.log(a1) // ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
console.log(a2) // ['A', 'B', 'C', 'D']
console.log(arr) // ['A1', 'A2', 'A', B1', 'B2', 'B', C1', 'C2', 'C', D1', 'D2', 'D']
  • 思路二:

来个通俗易懂的

const arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
const arr2 = ['A', 'B', 'C', 'D']
const ret = []
let tmp = arr2[0]
let j = 0
for (let i=0;i<arr1.length;i++) {
  if (tmp === arr1[i].charAt(0)){
    ret.push(arr1[i])
  } else {
    ret.push(tmp)
    ret.push(arr1[i])
    tmp=arr2[++j]
  }
	if(i===arr1.length-1){
		ret.push(tmp)
	}
}
console.log(ret)
  • 思路三: 来个最牛的,哈哈 ```javascript let a1 = [‘A1’, ‘A2’, ‘B1’, ‘B2’, ‘C1’, ‘C2’, ‘D1’, ‘D2’] let a2 = [‘A’, ‘B’, ‘C’, ‘D’].map((item) => { return item + 3 })

let a3 = […a1, …a2].sort().map((item) => { if(item.includes(‘3’)){ return item.split(‘’)[0] } return item }) ``` 但是,个人认为这个虽然解决了这个问题;但是牺牲了复用性,只针对固定数据

  • 思路四?:

:point_down:~~~~ 欢迎在下方评论补充你的答案,一起来学习~:pushpin:

扩展阅读: