Javascript数组推送

时间:2017-06-06 23:00:52

标签: javascript arrays

我正在尝试迭代数组并将数组中的内容推送到另一个数组(如果它们满足某些基本条件)。真的很简单。请帮我。

获取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”数组中。

4 个答案:

答案 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);