已知二位数组转特定数组

已知`
[ [4788, 4790]
[4795, 4796]
[4795, 4797]
[4795, 4798]
[10068, 10069]
[10068, 10070]
[10068, 10071],

[10080, 10081, 10084,]
[10080, 10085, 10086,]
[10080, 10085, 10087, ]
[10080, 10085, 10088,]
[10080, 10089, 10090, ]
[10080, 10089, 10091]

]


期望结果
[name:4788,value:[4790],
name:4795,value:[4796,4797,4798],
name:10068,value:[10069,10070,10071],
name:10080,value:[10084,10086,10088,10090,10091],
阅读 1.4k
2 个回答

使用数组函数reducefind处理,假定你给出的源数组为arr
实现代码如下

rs = arr.reduce((acc, cur) => {
  tmp = acc.find(v => v.name == cur[0])
  if (tmp == undefined) {
    acc.push({ name: cur[0], value: cur.slice(cur.length-1) })
  } else {
    tmp.value = tmp.value.concat(cur.slice(cur.length-1))
  }
  return acc
}, [])

console.log(rs)

打印的效果

[ { name: 4788, value: [ 4790 ] },
  { name: 4795, value: [ 4796, 4797, 4798 ] },
  { name: 10068, value: [ 10069, 10070, 10071 ] },
  { name: 10080, value: [ 10084,10086,10088,10090,10091]}]

这个需求并不难,for循环就能搞定,其实不建议楼主到这里来要答案,当伸手党。楼主可以看下JS的循环语法,再琢磨一下肯定能写出来。大致思路是:

新建一个变量保存结果
循环原数据
如果结果变量中已经存在原数据的元素了,直接插入新的数据
如果结果变量中不存在这个元素,新建这个元素,并插入值

我不会给你代码的,因为后面的工作中你会面临比这个难得多的需求,不可能每次都上来请别人给你写代码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题