【问题标题】:How to retrieve data from Object using each loop by adding key value?如何通过添加键值使用每个循环从对象中检索数据?
【发布时间】:2014-05-15 06:44:59
【问题描述】:

我有一个 url 路径,从 url 我得到基本和子 url 详细信息。使用所有这些 url,我想将控制器加载到网站。

我有单独的 ValidPath 对象。我正在尝试这样:

var ValidPaths = {
        "green":{
            "url":"greenController.js",
            "lightgreen" :{
                "url":"lightGreenController.js",
                "floragreen":{
                    "url":"floragreenController.js"
                }
            }
        }
    }
var path = ["green"].concat("lightgreen/floragreen".split('/'));
var finArr = [];

_.each(path, function(str,key){
    label += '["'+str+'"]';
    console.log(ValidPaths+label['url']); // i am not getting proper console details.
})

但我说错了。 我正在寻找我的 finArr 应该是这样的:

//should be [ {"label":"green","url":"greenController.js"}, {"label":"lightgreen","url":"lightGreenController.js"},{"label":"floragreen","url":"floragreenController.js"}]

所以我可以遍历临时引擎。谁能告诉我我在这里犯了什么错误?

Demo Here

【问题讨论】:

  • 刚刚做了小提琴见:jsfiddle.net/d9bgY
  • 不,这是错误的,我得到了所有相同的 url 详细信息

标签: jquery iteration underscore.js javascript-objects


【解决方案1】:
$(function() {
   var ValidPaths = {
        "green":{
            "url":"greenController.js",
            "lightgreen" :{
                "url":"lightGreenController.js",
                "floragreen":{
                    "url":"floragreenController.js"
                }
            }
        }
    },
    finArr = [],
       getNode = function(color, obj ) {
           var oPath = {}, i = 0;
           oPath.label = color;
           for( clr in obj ) {
               if( i === 0 ) {
                   oPath.url = obj[ clr ];
                   finArr.push( oPath );
               } else if( i === 1 ) {
                   getNode( clr, obj[ clr ] );
               }
               i++;
           }
       };
    for( clr in ValidPaths) {
        getNode( clr, ValidPaths[clr] );
    }
    console.log( finArr ); 
});

JSFiddle Demo

This version 是我能做到的最短的。更短,我遇到“未捕获 RangeError:超出最大调用堆栈大小”错误

【讨论】:

  • 它需要嵌套在其他的内部。因为我用它来管理模块。所以我需要保持父子关系来识别和避免模块崩溃
  • 我明白了。让我看看我能不能弄清楚。请查看更新的代码和工作演示。
  • 哪里有更新demo?请问可以正常更新吗?
  • 在我上面的代码下面有一个链接 JSFiddle Demo。
  • 是的,知道了。谢谢。但我们需要考虑缩短代码
【解决方案2】:

感谢用户 3558931,

 var paths = [path].concat(subPath.split('/')),
                    arr = [],prePath=ValidPaths;

                 function pathFinder (path,i){
                    if(prePath[path]){
                        arr.push({"label":path,"url":prePath[path]['url']});
                        prePath = prePath[path];
                    } else{
                        console.log("there is no path like " + path + "in ValidPaths");
                    }
                    return arr;
                }

                _.map(paths, function(root,i){
                    return pathFinder(root,i);
                });

                console.log("breadCrumb", arr);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2021-03-30
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2023-02-11
    相关资源
    最近更新 更多