目前我有三个阵列。 AppNames
这是一个应用程序名称。 Number of AddOns
这是每个应用程序正在使用的附加组件数。 (两个这些数组一起使用.E.G “cirr-contentful-demo”有1个添加)。
看下面:
var prodArrayAppName = [],
stgArrayAppName = [],
devArrayAppName = [],
prodNoAddOns = [],
stgNoAddOns = [],
devNoAddOns = [];
var appNames = ["cirr-contentful-demo", "cirr-contentful-handler-backup", "cirr-test-app"];
var numberAddOne = [1, 5, 7]
var production = [{
"id": "16",
"heroku_application": "cirr-contentful-demo",
"stage": "Production"
},
{
"id": "4",
"heroku_application": "cirr-contentful-handler-backup",
"stage": "Staging"
},
{
"id": "9",
"heroku_application": "test-backup",
"stage": "Development"
}];
我需要循环遍历production
对象数组,将heroku_application
名称与appNames
数组中的名称相匹配。找到后,检查阶段类型示例:生产,分期,开发。
将应用程序名称推送到正确的数组。 E.G生产申请prodArrayAppName
。然后获取应用程序具有的addOns数量并将其放入正确的NoOfAddons
。 E.G prodArrayAppName。
意味着最终游戏应该如下:
prodArrayAppName = [cirr-contentful-demo]
prodNoAddOns = [1]
stgArrayAppName = [cirr-contentful-handler-backu]
stgNoAddOns = [5]
devArrayAppName = [test-backup]
devNoAddOns = [7]
这是我到目前为止尝试的代码,但到目前为止没有运气:
production.forEach(function(a) {
appNames.forEach(function(b) {
numberAddOne.forEach(function(c) {
if (a === b.heroku_application) {
if (b.stage === "Production") {
prodArrayAppName.push(b.heroku_application);
prodNoAddOns.push(c);
} else if (b.stage === "Staging") {
stgArrayAppName.push(b.heroku_application);
stgNoAddOns.push(c);
} else {
devArrayAppName.push(b.heroku_application);
devNoAddOns.push(c);
}
}
});
});
});
答案 0 :(得分:1)
你真的不需要嵌套循环。
production
中的每个项目:
heroku_application
中找到项目appNames
的索引。我们将使用它来查找号码。stage
,将项目的名称添加到(阶段)ArrayAppName,并将项目的交叉引用号码添加到(阶段)NoAddOns。production.forEach(function(project) {
var index = appNames.indexOf(project.heroku_application);
if (index === -1) { return; }
switch (project.stage) {
case "Production":
prodArrayAppName.push(project.heroku_application);
prodNoAddOns.push(numberAddOne[index]);
break;
case "Staging":
stgArrayAppName.push(project.heroku_application);
stgNoAddOns.push(numberAddOne[index]);
break;
case "Development":
devArrayAppName.push(project.heroku_application);
devNoAddOns.push(numberAddOne[index]);
break;
}
});
答案 1 :(得分:1)
您根本不需要显式循环来完成此操作 - 使用reduce
:
var init = {
DevelopmentAppName:[],
DevelopmentNoAddOns:[],
StagingAppName:[],
StagingNoAddOns:[],
ProductionAppName:[],
ProductionNoAddOns:[],
};
var appNames = ["cirr-contentful-demo", "cirr-contentful-handler-backup", "cirr-test-app"];
var numberAddOne = [1,5,7]
var production = [
{
"id":"16",
"heroku_application":"cirr-contentful-demo",
"stage" : "Production"
},
{
"id":"4",
"heroku_application":"cirr-contentful-handler-backup",
"stage" : "Staging"
},
{
"id":"9",
"heroku_application":"test-backup",
"stage" : "Development"
}];
var result = production.reduce(function(p,c){
var idx = appNames.indexOf(c.heroku_application);
p[c.stage + 'AppName'].push(c.heroku_application);
p[c.stage + 'NoAddOns'].push(numberAddOne[idx] || 0);
return p;
}, init);
console.log(result);
答案 2 :(得分:1)
您尝试过的代码存在一些问题。如果(a === b.heroku_application)本身错误,您使用的条件检查。请尝试下面给出的代码
var prodArrayAppName = [], stgArrayAppName = [], devArrayAppName = [], prodNoAddOns = [],
stgNoAddOns = [], devNoAddOns = [];
var appNames = ["cirr-contentful-demo", "cirr-contentful-handler-backup", "cirr-test-app"];
var numberAddOne = [1,5,7];
var production = [
{
"id":"16",
"heroku_application":"cirr-contentful-demo",
"stage" : "Production"
},
{
"id":"4",
"heroku_application":"cirr-contentful-handler-backup",
"stage" : "Staging"
},
{
"id":"9",
"heroku_application":"test-backup",
"stage" : "Development"
}];
production.forEach(function(a) {
for(var i=0;i<appNames.length;i++)
{
if(a.heroku_application==appNames[i])
{
if(a.stage==="Production")
{
prodArrayAppName.push(appNames[i]);
prodNoAddOns.push(numberAddOne[i]);
}
else if(a.stage==="Staging")
{
stgArrayAppName.push(appNames[i]);
stgNoAddOns.push(numberAddOne[i]);
}
else if(a.stage==="Development")
{
devArrayAppName.push(appNames[i]);
devNoAddOns.push(numberAddOne[i]);
}
}
}
});
//checking code
prodArrayAppName.forEach(function(a) {
alert(a);
});
答案 3 :(得分:0)
这个功能可以完成您想要的大部分功能,虽然您可以自行决定向阵列添加正确的值(这很简单,只需按照我的所有逻辑进行操作即可。 ; ve发表评论)
function getAppAddOnCount(heroku_application_name) {
var apps = {};
// This loop can be put elsewhere
for (var i = 0, len = production.length; i < len; i++) {
// Replace this line with logic adding objects to your array as desired
apps[production[i].heroku_application] = i;
}
return {
prodArrayAppName: heroku_application_name,
prodNoAddOns: numberAddOne[apps[heroku_application_name]]
};
}