Javascript 使用JS变量名命名其他变量

Javascript 使用JS变量名命名其他变量,javascript,angularjs,json,Javascript,Angularjs,Json,我使用node为内部数据库工具获取泳道列表(作为JSON对象数组) 格式: swimlanes = [{"swimlane" : "1"},{"swimlane" : "2"}, ...] 然后检索所有MSSQL服务器实例的列表(格式相同) 我想做的是创建一个名为slInstances的JSON对象,它将是swimlane的实例数组的集合 slInstances = { "1" : ["host\instance", "host\instance"], "2" : ["host\instanc

我使用node为内部数据库工具获取泳道列表(作为JSON对象数组)

格式:

swimlanes = [{"swimlane" : "1"},{"swimlane" : "2"}, ...]
然后检索所有MSSQL服务器实例的列表(格式相同)

我想做的是创建一个名为slInstances的JSON对象,它将是swimlane的实例数组的集合

slInstances = { "1" : ["host\instance", "host\instance"], "2" : ["host\instance", "host\instance"]
我试过:

 function getInstancesSuccess(response){

            $scope.instances = response.data;

            $scope.slInstances = {};

            $scope.swimlanes.forEach(function(){
                var sl = this.swimlane;
                $scope.slInstances[sl] = $scope.instances.filter(function(el){
                    return el.swimlane == sl;
                })
            });
        }
(只是将“实例”保留在范围内,因为我将在其他方面使用它),但这根本不起作用。我的希望是能够让sl=类似于“1”的东西在每条泳道中循环。从而为slInstances[“1”]=和slInstances[“2”]=指定一个值

因此,在我的角度模板中,我可以按照以下方式进行操作:

<ul>
    <li ng-repeat="sl in swimlanes">{{sl['swimlane']}}
        <ul>
            <li ng-repeat="i in slInstances">{{ i[sl['swimlane']].instance}}
  • {{sl['swimlane']}
    • {i[sl['swimlane']].instance}
我不是简单地制作递增数组,而是使用这样一个对象的唯一原因是因为泳道的顺序不一致(0,1,22,23,30,31等),所以我希望它是关联的

我是不是完全错了

谢谢

编辑:

创建了一个plunker以显示:


我认为问题在于您对forEach的使用:

    scope.swimlanes.forEach(function(swimlane){
    var sl = swimlane;

仅仅看一下您的代码,我不明白您为什么需要组合这两个数组

第二个实例=[{“实例”:“主机\实例”,“泳道”:“1”}]包含它是哪个泳道

Angulars ng repeat将使数组中的每个项与其自身关联,在本例中,sl.swimlane和sl.instance将始终来自同一个对象

<ul>
  <li ng-repeat="sl in instances ">{{sl.swimlane]}}
    <ul>
        <li>{{sl.instance}}</li>
    </ul>
  </li>
</ul>
  • {{sl.swimlane]}
    • {{sl.instance}}

如果我了解您想要实现的目标:

var swimlanes = [{"swimlane" : "1"},{"swimlane" : "2"},{"swimlane" : "3"}];
var instances = [{"instance" : "host1/instance1", "swimlane" : "1"}, {"instance" : "host2/instance2", "swimlane" : "2"}];

var slInstances = {};

for (var i = 0; i < swimlanes.length; i++) {
    slInstances[swimlanes[i].swimlane] = [];
}


for (var i = 0; i < instances.length; i++) {
    slInstances[instances[i].swimlane].push(instances[i].instance);
}   

// returns {"1":["host1/instance1"],"2":["host2/instance2"],"3":[]}
var swimlanes=[{“swimlane”:“1”},{“swimlane”:“2”},{“swimlane”:“3”}];
var instances=[{“instance”:“host1/instance1”,“泳道”:“1”},{“instance”:“host2/instance2”,“泳道”:“2”}];
var slInstances={};
对于(变量i=0;i

如果是这种情况,请告诉我是否可以使用下划线.js使其更干净。

这个问题似乎更像是一个
数组操作。如果您为输入提供足够的数据和预期的输出,这将更有意义。是否可以快速提供JSFIDLE/plnkr?我的输入是这两个json对象数组,预期的输出是一个json对象,属性(由泳道分隔)等于对象数组(每个泳道的实例)我也许可以模拟一些东西。我正在使用mssql查询来获取这些对象数组。让我看看我能做什么。试着调试一下。在GetInstanceSuccess函数的第一行和浏览器中添加关键字调试器(首选chrome,因为它内置了强大的调试支持),并尝试执行此函数调用。这将帮助您理解您实现了什么逻辑。我唯一关心的是,泳道->实例之间存在一对多关系。所以我希望泳道有一条记录,然后在它下面列出该SL的所有实例。我相信这会为泳道显示一个li,为每个实例显示一个嵌套的li,而不是简单地为sl1显示一个li,然后在它下面显示与泳道相关的所有实例。好的,我现在知道你在尝试做什么了。在我的脑海里,我想类似嵌套for循环的东西可能会起作用。第一个循环第一个数组,第二个循环从第一个数组获取泳道值,搜索第二个数组,并将找到的任何对象推送到新数组中。然后回到第一个循环中,您可以将整个对象推送到一个数组中,该过程应该重新开始,以获取第一个数组中的下一个值。我明天会给你举个例子,但是现在已经很晚了。我的印象是,如果我在那个数组上调用这个函数,我就不需要通过泳道(不是100%确定这里指的是什么)。我弄错了吗?这是关于数组forEach函数的文档:您给forEach的回调只有一个参数——数组中的当前元素。这看起来是正确的,但是我看不到这段代码起作用。我已经用这个代码集更新了plunker,该代码集将保存在加载页面时运行的init()函数中!这似乎奏效了!非常感谢:DHO如何使用下划线更清晰?事实上,奇怪的是,这在plunker中起作用了--但是现在我已经将其放入我的项目中,我得到了一个错误“无法读取未定义的属性‘push’”。第一个for循环正在工作,我得到的输出是:{“0”:[],“1”:[],“2”:[],“3”:[],“4”:[],“5”:[],“22”:[],“30”:[],“31”:[],“32”:[]}但第二个似乎是错误的,这很奇怪,因为在这两种情况下,泳道号都是从查询返回的,例如[{“泳道”:0}]。它是否有可能使用数字创建对象的属性,但如果不使用带引号的字符串,它就无法引用该属性?0对“0”?
var swimlanes = [{"swimlane" : "1"},{"swimlane" : "2"},{"swimlane" : "3"}];
var instances = [{"instance" : "host1/instance1", "swimlane" : "1"}, {"instance" : "host2/instance2", "swimlane" : "2"}];

var slInstances = {};

for (var i = 0; i < swimlanes.length; i++) {
    slInstances[swimlanes[i].swimlane] = [];
}


for (var i = 0; i < instances.length; i++) {
    slInstances[instances[i].swimlane].push(instances[i].instance);
}   

// returns {"1":["host1/instance1"],"2":["host2/instance2"],"3":[]}