Javascript 使用字符串路径并对对象执行操作

Javascript 使用字符串路径并对对象执行操作,javascript,ecmascript-6,Javascript,Ecmascript 6,我有几个对象结构,看起来像: this.markets[marketIndex].stands; this.markets[marketIndex].stands[standIndex].rows; this.markets[marketIndex].stands[standIndex].rows[rowIndex]; 例如,当我想要删除时,我需要显式地调用整行,如下所示: delete this.markets[marketIndex].stands[standIndex].rows; de

我有几个对象结构,看起来像:

this.markets[marketIndex].stands;
this.markets[marketIndex].stands[standIndex].rows;
this.markets[marketIndex].stands[standIndex].rows[rowIndex];
例如,当我想要删除时,我需要显式地调用整行,如下所示:

delete this.markets[marketIndex].stands[standIndex].rows;
delete this.markets[marketIndex].stands[standIndex].rows[rowIndex];
我几乎可以删除每一层

是否有一种方法可以创建一个函数来处理删除操作以及何时给出路径

function deleteOperation(path) {
   delete this.markets[path]
}

// and call it like so:
let thePath = `[${marketIndex}].stands[${standIndex}].rows[${rowIndex}]`;

deleteOperation(thePath);
或者像这样推送数据:

function pushData(path) {
   let something = 'test'
   this.markets[path].text = something;
}
const unset = (obj, pathParts) => {
     if (pathParts.length === 1) {
         delete obj[pathParts[0]];
     } else {
         unset(obj[pathParts[0]], pathParts.slice(1));
     }
};

有没有办法做到这一点?

您可以使用lodash的unset方法: 否则,您可能会复制如下工作方式:

function pushData(path) {
   let something = 'test'
   this.markets[path].text = something;
}
const unset = (obj, pathParts) => {
     if (pathParts.length === 1) {
         delete obj[pathParts[0]];
     } else {
         unset(obj[pathParts[0]], pathParts.slice(1));
     }
};
您可以这样调用它:unset({},[“foo”,“0”,“bar]”);
如果要将字符串作为参数,只需使用string.split

delete(a.b.c.d)和delete a.b.c.d之间有什么区别?你能解释一下你希望你的论点“thePath”是什么样子的吗?JavaScript有让你这样做的功能,但它会引入一些显著的复杂性。我很好奇你想做什么。请记住JavaScript有一个垃圾收集器,所以不需要
删除每一级,只需删除最高的一级。@nikoss类似于
[0]。看台[2]。行[5]
@AlfredAyi bonte有趣,你能详细说明一下吗?像运行for循环?