Him*_*mel 3 javascript arrays recursion
如果我有一个数组数组,每个数组都包含对象属性名称(字符串),我如何递归修改对象以检查该属性是否存在并相应地添加它。数组中的最后一个值将作为给定属性的字符串值应用。
const propsToAdd = [
['propA', 'value'],
['propB', 'propC', 'propD', 'value'],
['propB', 'propF', 'value']
];
Run Code Online (Sandbox Code Playgroud)
生成的对象将包含相关属性(相应地嵌套),并且最终属性的值将等于数组中的最后一项。
const resultingObj = {
propA: 'value',
propB: {
propC: {
propD: 'value'
}
propF: 'value'
}
};
Run Code Online (Sandbox Code Playgroud)
我想递归地创建这样一个对象,因为数组的长度未知,子数组也是如此。
需要注意的是,以下情况不会发生,也不需要适应。
const propsToAdd = [
['propA', 'value'],
['propA', 'value', 'value1']
];
Run Code Online (Sandbox Code Playgroud)
换句话说,value(作为 的子级propA)不能同时是属性和值名称。
如何编写一个递归函数,将键/值对添加(和嵌套)到对象中?
由于您使用的是constES2015,因此您可以使用箭头函数、解构赋值和默认参数:
const nest = ([x, ...xs], o={}) =>
xs.length === 0 ? x : (o[x] = nest(xs,o[x]), o);
const nestmany = ([xs, ...yss], o={}) =>
xs === undefined ? o : nestmany(yss, nest(xs,o));
const propsToAdd = [
['propA', 'value1'],
['propB', 'propC', 'propD', 'value2'],
['propB', 'propF', 'value3']
];
console.log(nestmany(propsToAdd));Run Code Online (Sandbox Code Playgroud)