Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取对象的路径';从javascript中的一个值中删除一个值_Javascript_Node.js_Object - Fatal编程技术网

如何获取对象的路径';从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在哪里可以找到信息。这是我找到的解决方案深度检查的最简单方法,因为我试图写我自己的,然后找到了你的。看到它在正常物体上工作,而不是在窗户上。该窗口具有类似“父”的属性,这是海龟的所有方式!