Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
jefferyE opened this issue Mar 11, 2019 · 301 comments

Comments

@jefferyE
Copy link

jefferyE commented Mar 11, 2019

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'] 

以上是我个人想法,有更好方法的欢迎讨论

@GitHdu
Copy link

GitHdu commented Mar 11, 2019

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)

@atheist1
Copy link

atheist1 commented Mar 11, 2019

var a = ['A1','A2','B1','B2','C1','C2','D1','D2']
var b = ['A','B','C','D']
// 对需要排序的数字和位置的临时存储
var mapped = a.concat(b).map(function(el, i) {
  return { index: i, value: /\D$/.test(el) ? (el + 4) : el };
})
mapped.sort(function(a, b) {
  return +(a.value > b.value) || +(a.value === b.value) - 1;
});
var result = mapped.map(function(el){
  return a.concat(b)[el.index];
});

利用mdn对sort映射改善排序的方法进行的处理,不过对数组进行了多次处理,感觉方法不太好

@JJL-SH
Copy link

JJL-SH commented Mar 11, 2019

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
})

@gaomin
Copy link

gaomin commented Mar 11, 2019

var arr1 = ["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"]
var arr2 = ["A", "B", "C", "D"]
var arr3 = arr1.concat(arr2);
arr3.sort().sort(function(a,b){
   if (a.charAt(0) == b.charAt(0) && a.length > b.length){
       return -1
   }
	
})```

@ESnail
Copy link

ESnail commented Mar 11, 2019

var arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
var arr2 = ['A', 'B','C', 'D'];

function fn (arr1, arr2) {
let arr3 = [...arr1];
let index = -1;
arr2.forEach((v, i) => {
index = index + 3;
arr3.splice(index, 0, v);
});
return arr3;
}

console.log(fn(arr1, arr2)); // [ 'A1', 'A2', 'A', 'B1', 'B2', 'B', 'C1', 'C2', 'C', 'D1', 'D2', 'D' ]
// -1 + 3 = 2
// 2 + 3 = 5
// 5 + 3 = 8
// 8 + 3 = 11
// 首先想到了用concat+sort,但结果不对。后来想观察了一下,用splice插入,因为插入位置是固定的。

@veaba
Copy link

veaba commented Mar 11, 2019

看一下我这个可以嘛

var a1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
var a2 =['A','B','C','D'];
var j=-1;
var arr=[]
for(let i=0;i<a1.length;i++){
    if(i%2 ===0){
	j++
	arr=arr.concat((a1.slice(i,i+2)).concat(a2[j]))
    }
}
console.log(arr)

——————————————————————
截图
image

@acmu
Copy link

acmu commented Mar 11, 2019

我想问下,这题想考的是哪方面的知识?

@DraCod
Copy link

DraCod commented Mar 11, 2019

var arrOne =["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"];
var arrTwo = ['A', 'B', 'C', 'D'];

for (let i = 0; i < arrTwo.length; i++) {
let re = new RegExp(arrTwo[i], 'g');
for (let x = arrOne.length; x > 0; x--) {
if(re.test(arrOne[x])){
arrOne.splice(x+1,0,arrTwo[i])
}
}
}
console.log(arrOne);

这样是否可以呢?

@dorseysen
Copy link

image

@Rashomon511
Copy link

let arrA = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
let arrB = ['A', 'B', 'C', 'D',];
function combine(a, b) {
  while (b.length){
    let str =  b.shift();
    let indexNum = 0;
    a.forEach((item,index) => {
      if(item.indexOf(str) !== -1){
        indexNum = index
      }
    })
    a.splice(indexNum + 1, 0, str)
  }
  return a;
}

@tyosssss
Copy link

tyosssss commented Mar 11, 2019

var arr1 = ["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"];
var arr2 = ["A", "B", "C", "D"];

arr2.forEach((it, index) => {
  arr1.splice((index + 1) * 2 + index, 0, it);
});

console.log(arr1);

@blockmood
Copy link
Contributor

blockmood commented Mar 11, 2019

我想问下,这题想考的是哪方面的知识?

假设有一种情况,让你在一个列表中插入一个广告,不光是数组,对象依然有这种需求,这道题其实就是平常经常需要用到的一个小功能。

@Mizxinp
Copy link

Mizxinp commented Mar 11, 2019

const arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
const arr2 = ['A', 'B', 'C', 'D']
const arr = [...arr1,...arr2]
let targetArr = [];
arr2.forEach(item => {
  arr.forEach(ele=>{
      if(ele.includes(item)){
	targetArr.push(ele)
       }
   })
});	
console.log('targetArr',targetArr);

@bigbigbo
Copy link

bigbigbo commented Mar 11, 2019

如果只是单纯解这道题的话,我这样做:

const res = ["A", "B", "C", "D"].reduce(
  (memo, item) => {
    const tmp = [...memo].reverse();
    const idx = memo.length - tmp.findIndex(i => i.startsWith(item)) - 1;

    return [...memo.slice(0, idx + 1), item, ...memo.slice(idx + 1)];
  },
  ["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"]
);

这样即使是["A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "D1", "D2"]等等也没问题啦

@Moriarty02
Copy link

Moriarty02 commented Mar 12, 2019

const arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
const arr2 = ['A', 'B', 'C', 'D']
function combineArr(a1, a2) {
  const ret = a2.map((item, index) => {
    return [a1[index * 2], a1[index * 2 + 1], item]
  })
  return ret.toString().split(',')
}
console.log(combineArr(arr1, arr2))

2个参考点

  1. arr1和arr2本身就是有序的,A1的index和A的index成2倍关系
  2. 可以使用Array的toString方法将数组拍平

@fengT-T
Copy link

fengT-T commented Mar 12, 2019

const matchIndex = str => str.match(/\d+/) || []
const getCharCode = str => str.match(/\w/)[0].charCodeAt()
const result = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
  .concat(['A', 'B', 'C', 'D'])
  .sort((a,b) => {
    const [[aIndex = Infinity], [bIndex = Infinity]] = [matchIndex(a), matchIndex(b)]
    const [aChar, bChar] = [getCharCode(a), getCharCode(b)]
    return aChar === bChar
      ? aIndex - bIndex
      : aChar - bChar
  })
console.log(result)

提一个新思路的版本,从修改sort入手,不依赖数组下标,通用性更强

@Lueny-cn
Copy link

Lueny-cn commented Mar 12, 2019

let arr1 = ["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"]
  , arr2 = ["A", "B", "C", "D"]

function concatArr(arr1, arr2) {
  let newArr = []
  
  while (arr2.length !== 0) {
    let tag2 = arr2.pop()
    
    newArr.unshift(tag2)
    
    while (arr1.length !== 0) {
      let tag1 = arr1.pop()
      
      if (tag1.includes(tag2)) {
        newArr.unshift(tag1)
      } else {
        arr1.push(tag1)
        break
      }
    }
  }
  return newArr
}

console.log(arr1)
console.log(arr2)
console.log(concatArr(arr1, arr2))

@ghost
Copy link

ghost commented Mar 12, 2019

其实解法很简单的

let arr1 = ["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"];
let arr2 = ["A", "B", "C", "D"];
console.log(
  [...arr1, ...arr2]
    .sort(
      (v2, v1) => (
        v2.codePointAt(0) - v1.codePointAt(0) ||
        v1.length - v2.length ||
        v2.codePointAt(1) - v1.codePointAt(1)
      )
    )
);

@jjeejj
Copy link
Contributor

jjeejj commented Mar 12, 2019

其实解法很简单的

let arr1 = ["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"];
let arr2 = ["A", "B", "C", "D"];
console.log([...arr1, ...arr2].sort((v2, v1)=>(v2.codePointAt(0) - v1.codePointAt(0) ? v2.codePointAt(0) - v1.codePointAt(0) : (v1.length - v2.length) || v2.codePointAt(1) - v1.codePointAt(1))));

@liuliangsir 解法是对的,就是你这个函数能不能换行啊,这样长看着多不舒服

@BaconZhang
Copy link

const arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
const arr2 = ['A', 'B', 'C', 'D']
const res = [].concat(...arr2.map(i => arr1.filter(j => j.startsWith(i)).concat(i)))
console.log(res)

@cb3570594
Copy link

let arrA = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
let arrB = ['A', 'B', 'C', 'D',];
arrA.map(item => {
  if(item == arrB[0]+2) {return [item,arrB.shift()] } 
  else{return item}
}).flat()

借鉴了前面各位大神的。

@yeyan1996
Copy link

yeyan1996 commented Mar 14, 2019

var arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
var arr2 = ['A', 'B', 'C', 'D']

const func = (arr1, arr2) => arr2.reduce((acc, cur) => [...acc, ...arr1.filter(item => item.startsWith(cur)), cur], [])

@WozHuang
Copy link

题目测试用例有点少规则太模糊了。。

写一个用sort的吧

const arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
const arr2 = ['A', 'B', 'C', 'D'];
const arr3 = arr1.concat(arr2);
const comp = function(a,b){
    const len = Math.max(a.length, b.length);
    for(let i = 0; i < len; i++){
        if(a.charAt(i) === "") return 1;
        if(b.charAt(i) === "") return -1;
        if(a.charAt(i) !== b.charAt(i)){
            return a.charAt(i) > b.charAt(i) ? 1:-1;
        }
    }
    return 0;
}
arr3.sort(comp);
console.log(arr3);

@ghost
Copy link

ghost commented Mar 14, 2019

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
})

@bran-nie
Copy link

bran-nie commented Mar 15, 2019

let a =  ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
let b = ['A', 'B', 'C', 'D']
let arr = a.concat(b).sort()

let tmp = '', r = []
arr.forEach((item, index, a) => {
    if (item.length === 1 && tmp === '') {
	tmp = a[0]
    } else if (item.length === 1) {
	r.push(tmp)
	tmp = item
    } else {
	r.push(item)
    }

    // 这里是将最后获取的单个值,push到最后。
    if (index === a.length -1) {
	r.push(tmp)
    }
})

console.log(r) // ["A1", "A2", "A", "B1", "B2", "B", "C1", "C2", "C", "D1", "D2", "D"]

想法是将合并后的数组sort完,将如A、B替换到A1等的后面。这样的好处是只需要一次遍历。缺点是仅仅针对题目的数据格式,即A1 和 A的字符串长度。

其实一开始想到的是下面这种替换合并后的数组。不过感觉不如新起一个数组

let a =  ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
let b = ['A', 'B', 'C', 'D']
let arr = a.concat(b).sort()
let tmp = ''
arr.forEach((item, index, a) => {    
    if(item.length === 1 && tmp === '') {
        tmp = a.splice(0, 1)
    } else if(item.length === 1) {
        tmp = a.splice(index, 1, ...tmp)
    } else if(index === a.length -1) {
    	a.push(...tmp)
    }
})
console.log(arr) // ["A1", "A2", "A", "B1", "B2", "B", "C1", "C2", "C", "D1", "D2", "D"]

@underlineMY
Copy link

let arr1 = ['A1', 'A2', 'A3', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
let arr2 = ['A', 'B', 'C', 'D','E'];
let newArr1 = [];
newArr1 = arr2.map((item)=>{
	let arr3 = arr1.filter((value)=> value.startsWith(item));
	arr3.push(item);
	return arr3
})
console.log(newArr1.join(',').split(','));
//["A1", "A2", "A3", "A", "B1", "B2", "B", "C1", "C2", "C", "D1", "D2", "D", "E"]

@zhoufeifan
Copy link

zhoufeifan commented Mar 15, 2019

  const arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
  const arr2 = ['A', 'B', 'C', 'D']
  const arr = [...arr1,...arr2]
  arr.sort((a,b)=>{
    // 用字符 : 去做默认占位,因为它 的 ASCII 码大于数字9
    if(a.length > b.length) {
      b = b.padEnd(a.length,':')
    }else {
      a = a.padEnd(b.length,':')
    }
    if(a>b) return 1
    if(a<b) return -1
    return 0
  })
 console.log(arr)

@YunShengTeng
Copy link

const a = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
const b = ['A', 'B', 'C', 'D'];
// ['A1', 'A2', 'A', 'B1', 'B2', 'B', 'C1', 'C2', 'C', 'D1', 'D2', 'D'];

for (let i = 0; i < b.length; i++) {
  const n = b[i];
  const xx = i + (2 * (i + 1));
  a.splice(xx, 0, n);
}

console.log(a);

@DeyaoCai
Copy link

DeyaoCai commented Mar 15, 2019

console.log(
  function concatArr() {
    return [].concat.apply([], arguments).sort((a, b) => {
      // 如果a 小 在前 则返回 -1
      return a[0] < b[0]
        ? -1
        : a[1]
          ? 1
          : a[1] - b[1];
    });
  }(['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'], ['A', 'B', 'C', 'D'])
);

@sunseekers
Copy link

//利用字符串的charCodeAt 进行排序,some 只要找到一个符合条件的就不要在进行循环了
var array = ['A1', 'A2','B1', 'B2', 'C1', 'C2', 'D1', 'D2']
var array1 = ['A','B','C','D']
var result = array//重新定义一个新的数组,不影响原来的数组
var array2 = array.join('').split('')
array1.some((x,index)=>{
array2.some((y,key)=>{
if(y.charCodeAt()>x.charCodeAt()){
return result.splice((key/2)+index,0,x)
}
})
})
result.push(array1[array1.length-1])

@SceneryCN
Copy link

SceneryCN commented Feb 20, 2023

方法比较low但是应该是能实现

const joinArr = (arrA, arrB) => {
  let fisrt = arrA[0].replace(/\d/g, "");
  for (let i = 0; i < arrA.length; i++) {
    if (
      arrA[i].replace(/\d/g, "") !== fisrt &&
      arrB.indexOf(arrA[i].replace(/\d/g, "")) >= 0
    ) {
      arrA.splice(
        i,
        0,
        arrB.find((item) => item === fisrt)
      );
      fisrt = arrA[i + 1].replace(/\d/g, "");
    }
  }
  return arrA;
};

@89466598946659
Copy link

89466598946659 commented Feb 20, 2023 via email

@bin-dogami
Copy link

bin-dogami commented Feb 20, 2023 via email

@cxl-blog
Copy link

cxl-blog commented Mar 9, 2023

const arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
const arr2 = ['A', 'B', 'C', 'D']
;[...arr1, ...arr2].sort((a, b) => a.charCodeAt()-b.charCodeAt())

// 不确保合并的顺序可以先对长度排序
;[...arr2, ...arr1].sort((a,b) => b.length - a.length).sort((a, b) => a.charCodeAt()-b.charCodeAt())

@ScholatLouis
Copy link

ScholatLouis commented Mar 9, 2023 via email

@1242793152
Copy link

可以利用aplisce插入元素的特性,实现一个更简单的方法
let arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
let arr2 = ['A', 'B', 'C', 'D']
function toggle(arr1,arr2){
let index = 2;
arr2.forEach(element => {
arr1.splice(index,0,element)
index += 3
})
console.log(arr1)
return arr1
}
toggle(arr1,arr2)

@luke358
Copy link

luke358 commented Mar 13, 2023

同首字母比大小,大的先放,不同首字母比大小,小的先放,最后两个把数组全部放完
时间复杂度 O(n),空间复杂度 O(1)

function merge(arr1, arr2) {
  let res = []
  let len1 = arr1.length;
  let len2 = arr2.length;
  let l1 = 0, l2 = 0;
  while (l1 < len1 && l2 < len2) {
    if (arr1[l1].charAt(0) === arr2[l2].charAt(0)) {
      if (arr1[l1] > arr2[l2]) {
        res.push(arr1[l1++])
      } else {
        res.push(arr2[l2++])
      }
    } else {
      if (arr1[l1] < arr2[l2]) {
        res.push(arr1[l1++])
      } else {
        res.push(arr2[l2++])
      }
    }
  }
  while(l1 < len1) {
    res.push(arr1[l1++])
  }
  while(l2 < len2) {
    res.push(arr2[l2++])
  }
  return res;
}

let arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
let arr2 = ['A', 'B', 'C', 'D']
merge(arr1, arr2)
merge(arr2, arr1)

@sy-l123
Copy link

sy-l123 commented Apr 13, 2023

var arrOne = ["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"];
var arrTwo = ['A', 'B', 'C', 'D'];

const concatArrFn = () => {
    arrTwo.forEach((e, i) => {
        arrOne.splice((i + 1) * 3 - 1, 0, e);
    });
    return arrOne;
};

@ScholatLouis
Copy link

ScholatLouis commented Apr 13, 2023 via email

@bin-dogami
Copy link

bin-dogami commented Apr 13, 2023 via email

@sunchengfeng01
Copy link

const arr1 = ['A1', "A2", "B1", 'B2', 'C1', 'C2', 'D1', 'D2']
const arr2 = ["A", 'B', 'C', 'D']
const arr3 = []
let idnex=0
arr1.forEach((item,index) => {
if (item[0] == arr2[idnex]) {
arr3.push(item)
if (index === arr1.length - 1) {
arr3.push(arr2.pop())
}
} else {
arr3.push(arr2[idnex])
arr3.push(item)

idnex=idnex+1
}

})
console.log(arr3)

@bin-dogami
Copy link

bin-dogami commented Jun 8, 2023 via email

@89466598946659
Copy link

89466598946659 commented Jun 8, 2023 via email

@ScholatLouis
Copy link

ScholatLouis commented Jun 8, 2023 via email

@Chenmin926
Copy link

var a1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
var a2 = ['A', 'B', 'C', 'D']

function fn1(a1, a2) {
let result = []
let current = a2.shift()
for (let i = 0; i < a1.length; i++) {
let next = a1[i + 1]
result.push(a1[i])
if ((next && !next.startsWith(current)) || !next) {
result.push(current)
current = a2.shift()
}
}
console.log(result)
}
fn1(a1, a2)

@G-WangZH
Copy link

G-WangZH commented Sep 19, 2023

var a1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
var a2 = ['A', 'B', 'C', 'D'];

function concatArr(arr1, arr2) {
    const map = new Map();
    const res = [];
    for (let i of arr2) {
        let temp = arr1.filter(j => j.includes(i));
        map.set(i, temp);
    }
    for (let [k, v] of map.entries()) {
        res.push(...v, k);
    }
    return res;
}

concatArr(a1, a2)
// ['A1', 'A2', 'A', 'B1', 'B2', 'B', 'C1', 'C2', 'C', 'D1', 'D2', 'D']

@ScholatLouis
Copy link

ScholatLouis commented Sep 19, 2023 via email

@89466598946659
Copy link

89466598946659 commented Sep 19, 2023 via email

1 similar comment
@89466598946659
Copy link

89466598946659 commented Oct 10, 2023 via email

@ScholatLouis
Copy link

ScholatLouis commented Oct 10, 2023 via email

@zz201276
Copy link

let arr1 =  ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'] ,arr2 = ['A', 'B', 'C', 'D']
let sortarr = [...arr1, ...arr2].sort((a: any, b: any) => {
    return a.charCodeAt(0) - b.charCodeAt(0)
})

代码很少的方法

@Sberm
Copy link

Sberm commented Jan 1, 2024

凑个热闹!

let a = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
let b =  ['A', 'B', 'C', 'D'];

let r = [...a, ...b].sort((c, d) => {
    if (c[0] < d[0] || (c[0] == c[d] && c.length > d.length)) {
        return -1;
    }
});
console.log(r);

@89466598946659
Copy link

89466598946659 commented Jan 1, 2024 via email

@ScholatLouis
Copy link

ScholatLouis commented Jan 1, 2024 via email

@fayeah
Copy link

fayeah commented Mar 7, 2024

function mergeArr(arr1, arr2) {
    const result = []
    for(let i=1;i < arr1.length;i++) {
        if (arr1[i].substring(0, 1) !== arr1[i-1].substring(0, 1)) {
            result.push(arr1[i-1])
            result.push(arr2.shift())
        } else {
            result.push(arr1[i-1])
        }
        if (i === arr1.length - 1) {
            result.push(arr1[i])
            result.push(arr2.shift())
        }
    }
    return result
}
mergeArr(['A1', 'A2', 'A3', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2', 'E1'], ['A', 'B', 'C', 'D', 'E'])

@ScholatLouis
Copy link

ScholatLouis commented Mar 7, 2024 via email

@89466598946659
Copy link

89466598946659 commented Mar 7, 2024 via email

@Archerry
Copy link

var a1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
var a2 = ['A', 'B', 'C', 'D']

function concatArray(arr1, arr2) {
var resultArr = []
for (const index in arr2) {
const tag = arr2[index]
const targetArr = arr1.filter(item => item.startsWith(tag))
console.log(targetArr)
resultArr.push(...targetArr, arr2[index])
}
return resultArr
}

var resultArr = concatArray(a1, a2)
console.log(resultArr)

@ScholatLouis
Copy link

ScholatLouis commented Jul 12, 2024 via email

@89466598946659
Copy link

89466598946659 commented Jul 12, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests