我正在尝试迭代数组并将数组中的内容推送到另一个数组(如果它们满足某些基本条件)。真的很简单。请帮我。
获取MongoDB中的DB列表
>>var dbs = db.getMongo().getDBNames();
>>dbs
[ "admin", "newdb", "newdb2", "local", "test" ]
获取数组长度:
var arrayLength = dbs.length;
创建一个空数组
var databases = []
如果内容不等于'admin','local'或'test',则从dbs数组推送数据库数组内容
for (var i = 0 ; i < arrayLength; i++) {
if (!(dbs[i] == "admin") || !(dbs[i] == "local") || !(dbs[i] == "test")) {
databases.push(dbs[i]);
}
}
期望只有“newdb”和“newdb2”才能在数据库数组中。但一切都在推动
>databases
[ "admin", "newdb", "newdb2", "local", "test" ]
这里发生了什么?只有newdb和newdb2需要在“databases”数组中。
答案 0 :(得分:4)
在这种情况下,你应该使用&&
而不是||
:
(!(dbs[i] == "admin") || !(dbs[i] == "local") || !(dbs[i] == "test"))
上面写的方式,它是&#34;值不是A或不是B或不是C&#34;对于所有内容都是如此。 (例如,A不是B。)
你的意思是说&#34;价值不是A而不是B而不是C&#34;。
(!(dbs[i] == "admin") && !(dbs[i] == "local") && !(dbs[i] == "test"))
答案 1 :(得分:2)
简单的东西。 : - )
index
答案 2 :(得分:1)
请改用:
var dbs = [ "admin", "newdb", "newdb2", "local", "test" ];
var arrayLength = dbs.length;
var databases = [];
for (var i = 0 ; i < arrayLength; i++){
if ((dbs[i] != "admin") && (dbs[i] != "local") && (dbs[i] != "test"))
{
databases.push(dbs[i])
}
}
console.log(databases);
答案 3 :(得分:0)
我没有看到它提到,但我建议查看Array.prototype.filter。这将为您创建第二个数组,并且还管理对第一个数组的值的迭代。我也会避免一大堆条件,只需依靠Array.prototype.includes为你做的工作。
var dbs = ["admin", "newdb", "newdb2", "local", "test"];
var unwantedValues = ["admin", "local", "test"];
var databases = dbs.filter(function(value) {
return !unwantedValues.includes(value);
});
编辑,您也可以将其视为创建补充,就像在数学中一样。
// Create this as a utility function in your code
// Return a new array object that contains all values from arrayA
// that are not in arrayB
function complement(arrayA, arrayB) {
return arrayA.filter(function(value) {
return !arrayB.includes(value);
});
}
// Then call it
var databases = complement(dbs, unwantedValuesArray);