使用Vanilla JavaScript合并对象

时间:2018-12-23 06:24:02

标签: javascript reactjs

我一直在研究事件处理程序,以将输入与状态同步,并提出以下解决方案:

https://gist.github.com/jadeallencook/678869f988bd65378d819496c4343e78

处理程序使用字符串将值推送到终点,并将结果与​​当前状态合并,但我必须使用lodash来完成它,无论如何在香草中完成它?

3 个答案:

答案 0 :(得分:1)

reduce将产生通用解决方案:

const path = 'foo-bar-num';
const paths = path.split('-');
const object = {};
const value = 'Woo hoo!';

paths.reduce(([object, value], path, idx) => {
  object[path] = idx === paths.length - 1 ? value : {};
  return [object[path], value];
}, [object, value]);

console.log(object)

答案 1 :(得分:0)

或者,您可以尝试使用lodash User.associate = models => { User.hasMany(models.Text) }函数为深层嵌套的对象设置值。

set

答案 2 :(得分:0)

您可以存储最后一个键,并只存储之前的键。最后,存储先前的值并分配新的值。

function setValue(object, keys, value) {
    var last = keys.pop(),
        temp = keys.reduce((o, k) => o[k] = o[k] || {}, object);

    temp.original = !(last in temp) ? null : temp[last];
    temp[last] = value;
}

const
    object = {},
    path = 'foo-bar-num',
    value = 'Woo hoo!';

setValue(object, path.split('-'), value);

console.log(object);