Javascript 使用JS变量名命名其他变量
我使用node为内部数据库工具获取泳道列表(作为JSON对象数组) 格式: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
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":[]}