我用样本来解释这个问题。
例如,我有javascript对象。看上去:
var trial= { points:[{x:1,y:2},{x:5,y:2},{x:3,y:4}] , obj:{id:5,name:"MyName"} }我使用diff模块来查找两个json数组之间的差异。然后找出不同的地方,找到不同的路径。如果x的值被更改,那么它就会找到。
例如
path = ["points",0,"x"]
or
path= ["obj","name"]因此,我的问题是如何从这些路径生成json对象。
例如,我必须生成
trial.points[0].x or trial.obj.name 怎么做?谢谢你的回答。
发布于 2017-12-05 07:45:26
你可以这样做:
var trial= { points:[{x:1,y:2}, {x:5,y:2},{x:3,y:4}] , obj:{id:5,name:"MyName"}};
var path = ["points", 0, "x"];
var object = trial;
path.map(field => object = object[field]);
console.log(object);
path = ["obj", "name"];
var object = trial;
path.map(field => object = object[field]);
console.log(object);
发布于 2017-12-05 07:45:09
您可以使用以下逻辑:
for(var i = 0, result = trial; i < path.length; i++) {
result = result[path[i]];
}发布于 2017-12-05 08:07:34
您可以使用array#reduce并将object和path作为变量传递。Array#reduce将返回与路径对应的值。
var trial= { points:[{x:1,y:2},{x:5,y:2},{x:3,y:4}] , obj:{id:5,name:"MyName"} },
path1 = ["points",0,"x"],
path2= ["obj","name"],
valueAtPath = (object, path) => path.reduce((r,p) => r[p], object);
console.log(valueAtPath(trial, path1));
console.log(valueAtPath(trial, path2));
https://stackoverflow.com/questions/47648422
复制相似问题