【发布时间】:2018-09-01 23:42:32
【问题描述】:
我正在尝试转换一个嵌套结构,使用lodash的库,我已经达到了预期的结果,但是如果结构发生变化它们就不起作用了,所以我来找你帮助我使转换的功能更加健壮JSON。
初始结构如下所示
const data = {
foo: {
bar: {
baz: [{ a: 1, b: 2, c: 3 }]
},
baz: {
bar: [{ a: 1, b: 2, c: 3 }]
},
foo: {
bar: [{ a: 1, b: 2, c: 3 }]
}
},
bar: {
baz: {
bar: [{ a: 1, b: 2, c: 3 }]
}
},
baz: {
foo: {
bar: [{ a: 1, b: 2, c: 3 }]
}
}
};
变身后
const transform = [
{
name: 'barfoo',
results: [{ a: 1, b: 2, c: 3 }]
},
{
name: 'bazfoo',
results: [{ a: 1, b: 2, c: 3 }]
},
{
name: 'foofoo',
results: [{ a: 1, b: 2, c: 3 }]
},
{
name: 'bazbar',
results: [{ a: 1, b: 2, c: 3 }]
},
{
name: 'foobaz',
results: [{ a: 1, b: 2, c: 3 }]
}
];
变换的思路是将第一层的嵌套key和父节点的key连接起来,生成新对象中name的值,第二层对象的值作为值results
例如对于数据中 foo 对象的第一次迭代
name = key(foo.bar) + key(foo)
results = value(foo.bar.baz)
name = 'barfoo'
results = [{ a: 1, b: 2, c: 3 }]
name = key(foo.baz) + key(foo)
results = value(foo.baz.bar)
name = 'bazfoo'
results = [{ a: 1, b: 2, c: 3 }]
name = key(foo.foo) + key(foo)
results = value(foo.foo.bar)
name = 'foofoo'
results = [{ a: 1, b: 2, c: 3 }]
数据内部的其他对象也是如此。
【问题讨论】:
-
你为什么要让我们猜测转换后的数据是如何从原始数据中获得的?你让它变得特别困难,因为所有结果对象都是相同的。请帮我们解释一下
barfoo和其他人的来源以及转换背后的逻辑。 -
所以这有点帮助,但它仍然没有说明
barfoo来自哪个对象。是data.foo.foo.bar的那个吗?data.baz.foo.bar?data.foo.baz.bar? -
感谢您的帮助马克,我已经更新了问题,希望能更好地理解一点
标签: javascript functional-programming lodash