如何使用类似字符串的路径更改JavaScript对象?

如何使用类似字符串的路径更改JavaScript对象?,javascript,Javascript,我希望使用字符串作为要更改的值的路径来控制对象中的值。例如,我有: let object = { v: 12, o: { v: 15 }} 如果我提供路径:“object.v”和值:16,对象变为: { v: 16, o: { v: 15 }} { v: 16, o: { v: 8 }} 如果我提供路径:“object.o.v'和值:8,对象变为: { v: 16, o: { v: 15 }} { v: 16, o: { v: 8 }} 路径也可以指向对象,例如'object.o' 如

我希望使用字符串作为要更改的值的路径来控制对象中的值。例如,我有:

let object = { v: 12, o: { v: 15 }}
如果我提供
路径:“object.v”
值:16
对象
变为:

{ v: 16, o: { v: 15 }}
{ v: 16, o: { v: 8 }}
如果我提供
路径:“object.o.v'
值:8
对象
变为:

{ v: 16, o: { v: 15 }}
{ v: 16, o: { v: 8 }}
路径也可以指向对象,例如
'object.o'

如果路径指向一个不存在的变量,函数将创建它,并创建父变量,例如
'object.o.o2.o3'

实际上,我知道如何使用for循环来实现这一点,只需创建结构并更改最后一块面包屑上的值,但我想知道Javascript是否提供了实现这一点的简单函数

或者下面是我将如何使用for循环来实现它

let object = { v: 12, o: { v: 15 }}

function update (path, value) {

  const crumbs = path.split('.');
  let currentCrumb = object;

  let i;
  for (i = 1, count = crumbs.length; i < count - 1; ++i) {
    if (currentCrumb[crumbs[i]] === undefined) {
      currentCrumb[crumbs[i]] = {};
    }
    currentCrumb = currentCrumb[crumbs[i]];
  }

  currentCrumb[crumbs[i]] = value;
}

// usage
update('object.o.v', 51);
// object is now { v: 12, o: { v: 51 }}
let object={v:12,o:{v:15}
函数更新(路径、值){
常量crumbs=path.split('.');
让currentcrump=对象;
让我;
对于(i=1,count=crumps.length;i
JavaScript不是提供了一些有用的函数来使用路径或其他东西更新对象吗?或者你会怎么解决这个问题

谢谢

更新:
有人告诉我使用
eval
,问题是
值可以像我说的那样是一个对象。所以写
eval(path+'='+value)
是无效的,当值是一个对象但引用丢失时,我可以使用
JSON.stringify(value)
,这意味着如果
value
在其他地方更改,则eval'ed路径不受此更改的影响。还有其他建议吗?

这可以通过库来实现,他们称之为“属性路径数组”

这可以通过库来实现,他们称之为“属性路径数组”


我认为最好发送类似param的对象,然后第二个param将是路径,更具动态性<代码>更新(对象'o.v',51)
@kip是的,当然,我只是提供了一个示例,它并不是我试图实现的上下文function@Ammar是的,但请检查我的更新。我认为最好发送类似param的对象,然后第二个param将是路径,更具动态性<代码>更新(对象'o.v',51)
@kip是的,当然,我只是提供了一个示例,它并不是我试图实现的上下文function@Ammar是的,但请查看我的更新。谢谢,但我想我会使用我提供的块,因为我正在尝试构建自定义元素,所以我不想强制用户加载额外的库。谢谢,但我想我会使用我提供的块,因为我正在尝试构建自定义元素,所以我不想强制用户加载额外的库。