数组在这可以复制粘贴
const data = [
{ id: 3, next: 4 },
{ id: 4, next: 5 },
{ id: 5, next: 6 },
{ id: 6, next: 7 },
{ id: 7, next: 8 },
{ id: 8, next: 9 },
{ id: 2, next: 10 },
{ id: 1, next: 2 },
{ id: 20, next: 30 },
{ id: 30, next: 40 },
{ id: 100, next: 78 },
];
也是无意见在一个技术群里 看见说这是一道面试题
然后我自己就小试了一下
看着很简单 后期脑子转了一会儿大约得思路就是
先把next 不可以衔接在其他对象在后面的对象挑出来 再依次的寻找他的兄弟对象
这是截图
啊啊啊啊啊啊啊啊啊啊啊~~~ 这个可行 觉得有循环次数多自己优化~~~~~~~~~~~~~~~~~~~~~~~
代码在这 (还可以再精简 但是最近脑子转不过来 凑合用吧)
let newlist = [],
newi = 0
for (let i = 0; i < data.length; i++) {
if(!fn(data[i].id,i)){
newlist[newi] = []
newlist[newi].push(data[i])
fn1(data[i].next,newi)
newi ++
}
}
function fn1(next,ii){
for (let i = 0; i < data.length; i++) {
if(data[i].id == next){
newlist[ii].push(data[i])
fn1(data[i].next,ii)
break
}
}
}
function fn(id,i){
let yy = data.some((item,index)=>{
return (item.id == id || item.next == id ) && index != i
})
return yy
}
console.log(newlist)
没有多久我再问了一个我别的朋友 然后他五分钟就给了我一个回复
不得不说 这三年他在进步 我还是少儿代码
图片在这(看着是不是比我的精简很多)
代码在这
function getLinks(data) {
let stack = data.sort((a, b) => a.id - b.id),
newStack = [],
i = -1
for (; ++ i < stack.length;) {
if (!newStack.length) newStack[i] = [stack[i]]
else {
let s = newStack[newStack.length - 1]
console.log(s);
s[s.length - 1].next == stack[i].id ? newStack[newStack.length - 1].push(stack[i]) : newStack.push([stack[i]])
}
}
console.log(newStack,'iiiiiiii')
}
getLinks(data)
后期我看了我朋友的思路 做了个对比
发现我在工作中 是一个 思维很周密的人 做每一个功能甚至还能帮产品相出这样的弊端的人
我朋友的这个 可以做到 但是有问题 这个id和next 就是顺序进行 假设
数据是这样的 调换了 顺序 我朋友这个就有点行不通
我大致明白为什么 又懒得屡他的破代码 解释了
反正我的虽然多 而且还可以优化 但是最近脑子有点不够用 就凑合吧
如果要是想要结果 多次都能凑合的话 我的那个还凑合。。。。。
😁