代码养蛊,求个递归算法

2019-08-08 17:06:08 +08:00
 newmoyupoi

求个数据结果解析递归算法,不要求很复杂 数据结构如下: data = [{ value: 'Root', defaultValue: '根节点', key: '0-1', parentKey: '0', isEditable: false, title: 'xxx' children: [{ defaultValue: '子树', isEditable: false, key: '0-10.4061361533484542', parentKey: '0-1', value: '111', title: 'xxx', children: [{ defaultValue: '子子树', isEditable: false, key: '0-10-1.92052037502357025', parentKey: '0-1', value: '111', title: 'xxx' } }, { defaultValue: '子树', isEditable: false, key: '0-10.6243359336024665', parentKey: '0-1', value: '222', title: 'xxx' }] }] 根据上面的数据结构,想把所有级别里面的 title 删掉,保证数据结构不变,只 delete 整个 title,求大神给个好的处理办法

2151 次点击
所在节点    问与答
15 条回复
newmoyupoi
2019-08-08 17:09:02 +08:00
忘记说了,现在用的框架 react,如果有好的解法可以支付现金作为回报
jadehare
2019-08-08 17:24:26 +08:00
转成 json 找字段 title 删掉再转回来
newmoyupoi
2019-08-08 17:26:24 +08:00
@jadehare #2 牛 x !!!
newmoyupoi
2019-08-08 17:33:12 +08:00
@jadehare #2 如果 title 里面有 function 转不成 json 字符串呢?
octree
2019-08-08 17:37:57 +08:00
大兄弟你这个有语法错误。。。。
我感觉这样应该可以。


function mapValues(obj, transform) {
let result = {}
for (let key in obj) {
result[key] = transform(obj[key])
}
return result
}

function removeTitleRecursively(any) {
if (Array.isArray(any)) {
return any.map(removeTitleRecursively)
} else if (typeof any === 'object') {
delete any.title
return mapValues(any, removeTitleRecursively)
} else {
return any
}
}
newmoyupoi
2019-08-08 17:42:16 +08:00
data = [{
value: 'Root',
defaultValue: '根节点',
key: '0-1',
parentKey: '0',
isEditable: false,
title: 'xxx',
children: [{
defaultValue: '子树',
isEditable: false,
key: '0-10.4061361533484542',
parentKey: '0-1',
value: '111',
title: 'xxx',
children: [{
defaultValue: '子子树',
isEditable: false,
key: '0-10-1.92052037502357025',
parentKey: '0-1',
value: '111',
title: 'xxx'
}]
}, {
defaultValue: '子树',
isEditable: false,
key: '0-10.6243359336024665',
parentKey: '0-1',
value: '222',
title: 'xxx'
}]
}]


修改了下,这个语法没错误
octree
2019-08-08 17:51:21 +08:00
@newmoyupoi 上面代码应该发给你了
newmoyupoi
2019-08-08 18:07:28 +08:00
@octree #7 调用 removeTitleRecursively(数据)不是很好使,any.map(removeTitleRecursively)这个里面的 removeTitleRecursively 在 react 里面改成 this.removeTitleRecursively?
octree
2019-08-08 18:11:18 +08:00
@newmoyupoi 这两个函数放 React Component
外面就行了吧。
newmoyupoi
2019-08-08 18:11:31 +08:00
@octree #7 可以了 搞定 感谢 ing~
xtray
2019-08-08 20:25:13 +08:00
直接用正则或 sed 删不就行了
crs0910
2019-08-08 22:12:59 +08:00
const removeTitle = data => JSON.parse(JSON.stringify(data), (k, v) => k === 'title' ? undefined : v)
newmoyupoi
2019-08-09 19:33:17 +08:00
@crs0910 #12 不行,去掉 title 的目的不是为了去掉这个字段,而是 title 里面是个 function,无法用 JSON.stringify 做转换,所以 JSON.stringify(data)这一步是不行的
crs0910
2019-08-09 19:39:14 +08:00
@newmoyupoi #13 不明白你的意思。哈哈
newmoyupoi
2019-08-09 19:47:06 +08:00
@crs0910 #14 ![]( )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590230

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX