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

js数组操作问题

js数组操作问题

收到一只叮咚 2019-03-21 18:13:33
给定一个有序不重复数组arr1 = [a1,a2,....,an] , 一个该数组的子集 arr2 = [b1,b2,....,bn](顺序与arr1 一致)任意给定一个arr1的元素 ai , 请将其插入 arr2 并保证 顺序与 arr1 的顺序一致比如 arr1 [3,5,4,8] , arr2 [5,8] 现在要把 4 插入到 arr2需要结果为 [5, 4, 8]求一个优雅的运算方法---------------分割线-------------我采纳了 @hkuclion 的答案 并作了小小的修改let source = [3,5,4,8];let target = [5,8];let needle = 4;let source_index = source.indexOf(needle);if(source_index !== -1){    let target_index = -1;    while (source_index && target_index === -1) {        target_index = target.indexOf(source[--source_index]);    }    target.splice(target_index + 1, 0, needle);}
查看完整描述

4 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

尝试下面代码


let source = [3,5,4,8];

let target = [5,8];

let needle = 4;


let source_index = source.indexOf(needle);

if(source_index !== -1){

    let target_index = source_index? target.indexOf(source[source_index - 1]) + 1:source_index;

    target.splice(target_index, 0, needle);

}


查看完整回答
反对 回复 2019-04-01
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

还是二分 修改一下比较的方式就行


let arr1 = [3,5,4,8] 

let arr2 = [5,8] 

let indexMap = {}

for(let i=0;i<arr1.length;i++){

    indexMap[arr1[i]] = i

}

insert(arr2,0,arr2.length,4)

console.log(JSON.stringify(arr2))


function insert(arr,l,r,num){

    if(l==r){

        arr.splice(l, 0, num)

        return

    }

    let index = parseInt((r+l)/2)

    if(indexMap[arr[index]]<indexMap[num]){

        insert(arr,index+1,r,num)

    }else{

        insert(arr,l,index,num)

    }

}


查看完整回答
反对 回复 2019-04-01
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

  let source = [3, 5, 4, 8]

  let target = [5, 8]

  let insert = 4


  let index = source.indexOf(insert)

  for (let i = 0; i < target.length; i++) {

    let source_index = source.indexOf(target[i])

    if (source_index > index) {

      target.splice(i, 0, insert)

      break

    }

  }

  if (target.indexOf(insert) === -1) target.push(insert)


查看完整回答
反对 回复 2019-04-01
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

既然是有序的……其实有没有arr1都无所谓的……

有序的,你直接用二分把aiarr2里面塞就行了。


查看完整回答
反对 回复 2019-04-01
  • 4 回答
  • 0 关注
  • 448 浏览
慕课专栏
更多

添加回答

举报

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