如何获取对象的路径';从javascript中的一个值中删除一个值
例如:如何获取对象的路径';从javascript中的一个值中删除一个值,javascript,node.js,object,Javascript,Node.js,Object,例如: var someObject = { 'part1' : { 'name': 'Part 1', 'txt': 'example', }, 'part2' : { 'name': 'Part 2', 'size': '15', 'qty' : '60' }, 'part3' : [ { 'name': 'Part 3A', 'size': '10', 'qty' : '20' }, {
var someObject = {
'part1' : {
'name': 'Part 1',
'txt': 'example',
},
'part2' : {
'name': 'Part 2',
'size': '15',
'qty' : '60'
},
'part3' : [
{
'name': 'Part 3A',
'size': '10',
'qty' : '20'
}, {
'name': '[value]',
'size': '5',
'qty' : '20'
}, {
'name': 'Part 3C',
'size': '7.5',
'qty' : '20'
}
]};
我需要一个函数来获取对象到值“[值]”
的路径,该值可以位于对象上的任何位置
这个对象将由用户传递,因此我不知道它的结构
比如:
getPath(obj, '[value]');
试试这个:
该方法返回一个包含零件的对象
function getPath(obj, value, path){
path = path || [];
if(obj instanceof Array || obj instanceof Object){
//Search within children
for(var i in obj){
path.push(i); //push path, will be pop() if no found
var subPath = getPath(obj[i], value, path);
//We found nothing in children
if(subPath instanceof Array){
if(subPath.length == 1 && subPath[0]==i){
path.pop();
}
//We found something in children
}else if(subPath instanceof Object){
path = subPath;
break;
}
}
}else{
//Match ?
if(obj == value){
return {finalPath:path};
}else{
//not ->backtrack
path.pop();
return false;
}
}
return path;
}
也许这不是最好的代码,我花了10分钟,但它应该可以工作
要查看任何结果,请检查您的开发控制台F12。以下是一些代码,可以为您获取对象的路径,但不确定它有多超级安全:
function getPath(obj, val, path) {
path = path || "";
var fullpath = "";
for (var b in obj) {
if (obj[b] === val) {
return (path + "/" + b);
}
else if (typeof obj[b] === "object") {
fullpath = getPath(obj[b], val, path + "/" + b) || fullpath;
}
}
return fullpath;
}
其中,testObj
是示例中的对象:
console.log(getPath(testObj, '20')); // Prints: /part3/2/qty
console.log(getPath(testObj, "[value]")); // Prints: /part3/1/name
如果您在
窗口中尝试此操作
对象,您将遇到麻烦,因为它是自引用的。快速简便的解决方法是进行深度检查:
function getPath(obj, val, path, depth) {
if (!depth) depth = 0;
if (depth > 50) return '';
path = path || "";
var fullpath = "";
for (var b in obj) {
if (obj[b] === val) {
return (path + "/" + b);
}
else if (typeof obj[b] === "object") {
fullpath = getPath(obj[b], val, path + "/" + b, depth++) || fullpath;
}
}
return fullpath;
}
这将返回与上述相同类型的路径:
/part3/2/数量
要使其成为对变量regex的实际引用,请执行以下操作:
'window'+'/part3/2/qty'.replace(//([0-9]+)\//g,[$1].).replace(//\//g,'.')
你只能通过迭代整个对象并查找值来实现,而99%的情况下,当你需要这个值时,你是做错了什么。为什么你需要知道路径?如果[value]
在不同的路径上多次存在会怎样?经典回溯algorithm@ExplosionPills每个用户可以有一个不同的json结构,它填充设置文件路径和json模型,将[curMusic]放在当前音乐所在的节点上,这样我就知道json在哪里可以找到信息。这是我找到的解决方案深度检查的最简单方法,因为我试图写我自己的,然后找到了你的。看到它在正常物体上工作,而不是在窗户上。该窗口具有类似“父”的属性,这是海龟的所有方式!