我想检查一个数组元素是否包含在另一个数组中,到目前为止我已尝试过这两种方法,即使ignoreList包含该元素,它们也只执行true。
for (email in emailList) {
if(!(emailList[email].to.toLowerCase() in ignoreList)){
//if(ignoreList.indexOf(emailList[email].to.toLowerCase()) == -1){
我尝试了评论和未评论的方式。
从高层面来看。我想检查emailList中的电子邮件是否包含在ignoreList中,如果它在ignoreList中,那么我不希望它执行。
答案 0 :(得分:1)
试试这个:
for (var i = 0; i < emailList.length; i++){
if (ignoreList.indexOf(emailList[i].toLowerCase()) !== -1)
// Your code to deal with the ignored email here
}
较旧的浏览器没有数组的indexOf,因此您可能需要添加此原型:
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (obj, start) {
for (var i = (start || 0), j = this.length; i < j; i++) {
if (this[i] === obj) { return i; }
}
return -1;
};
}
答案 1 :(得分:1)
for (var i=0;i<emailList.length;i++) {
for (var j=0;j<ignoreList.length;j++) {
if (emailList[i].toLowerCase() != ignoreList[j]) //or whatever logic you're trying to pull off here
}
}
这将迭代BOTH数组,检查每个可能的电子邮件组合以忽略,并且您可以这样使用更简单的if语句
答案 2 :(得分:0)
您在in
子句中滥用if
。请参阅示例MDN docs for in
语法:objectName中的prop
丙
表示属性名称或的字符串或数字表达式 数组索引。
并且您正试图在some@example.com
['some@example.com', 'some1@example.com']
内检查false
。
答案 3 :(得分:0)
如果您可以使用Underscore.js,那么in
的所有问题或for
的样板文件都非常简单:
_.each( emailList, function( email ) {
if ( !_.contains( ignoreList, email ) ) {
// ...
}
});
如果您可以更改数据,那么emailList
的格式与ignoreList
(一组简单的电子邮件地址字符串)相同,即使更好:
_.each( _.difference( emailList, ignoreList ), function( email ) {
// ...
});