我有一个对象,它可能有任意多个层级,并且可能具有任何现有属性。
var obj = {
db: {
mongodb: {
host: 'localhost'
}
}
};
我想要设置(或覆盖)属性,如下所示:
set('db.mongodb.user', 'root');
// or:
set('foo.bar', 'baz');
属性字符串可以有任意深度,值可以是任何类型/事物。
对象和数组作为值时,如果属性键已经存在,它们不需要被合并。
前面的例子将产生以下对象:
var obj = {
db: {
mongodb: {
host: 'localhost',
user: 'root'
}
},
foo: {
bar: baz
}
};
我该如何实现这样的功能?
set('foo', 'bar'); set('foo.baz', 'qux');
的结果应该是什么?其中foo
最初保存一个String
,然后变成一个Object
。'bar'
会发生什么? - Jonathan Lonowskiset()
方法,只是执行obj.db.mongodb.user = 'root';
,那么你似乎想要的就是这样了? - adeneobar
被Object
覆盖了。 @adeneo和@rmertins确实如此 :) 但不幸的是,我必须包装一些其他逻辑。 @Robert Levy我找到了那个并使其可访问,但设置它似乎更加复杂... - John B.