找出JavaScript数组是否包含对象的最简洁有效的方法是什么?
这是我知道的唯一方法:
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好,更简洁的方法来实现这一目标?
这与Stack Overflow问题密切相关问题在JavaScript数组中查找项目的最佳方法是什么?它使用的方法寻找数组中的对象indexOf.
javascript arrays algorithm time-complexity javascript-objects
我被告知不要for...in在JavaScript中使用数组.为什么不?
我正在检查一个变量,例如foo,与多个值的相等性.例如,
if( foo == 1 || foo == 3 || foo == 12 ) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
关键是这个繁琐的任务代码相当多.我想出了以下内容:
if( foo in {1: 1, 3: 1, 12: 1} ) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但这并不完全吸引我,因为我必须为对象中的项目提供冗余值.
有没有人知道对多个值进行相等检查的正确方法?
我!!~在阅读时在代码中发现了一个奇怪的内容:https://github.com/LearnBoost/mongoose/blob/master/lib/document.js#L678
Document.prototype.isModified = function (path) {
return !!~this.modifiedPaths.indexOf(path);
};
Run Code Online (Sandbox Code Playgroud)
我读过那是什么!! (不是)JavaScript中的运算符?以及如何:〜运算符?; 为什么作者!!~在这里使用?
我试过了:
!!~1 // -> true
!!~0 // -> true
!!~-1 // -> false
!!~-2 // -> true
Run Code Online (Sandbox Code Playgroud)
似乎它只是false在数字的时候-1.这样对吗?为什么不核对一下电话号码是不是-1还是>=0?
javascript operators bitwise-operators mongoose comparison-operators
如果我在C#中有一个变量需要检查以确定它是否等于一组变量之一,那么最好的方法是什么?
我不是在寻找将该集存储在数组中的解决方案.我更好奇的是看是否有一种解决方案以某种方式使用布尔逻辑来得到答案.
我知道我可以这样做:
int baseCase = 5;
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5;
Run Code Online (Sandbox Code Playgroud)
我很想知道我是否可以做更像这样的事情:
int baseCase = 5;
bool testResult = baseCase == (3 | 7 | 12 | 5);
Run Code Online (Sandbox Code Playgroud)
显然上面的内容不起作用,但是我有兴趣看看是否有比我的第一个例子更简洁的东西,它必须为每个测试值一遍又一遍地重复相同的变量.
更新:
我决定接受CoreyN的答案,因为它似乎是最简单的方法.我认为这很实用,对于新手来说仍然很简单.
不幸的是,在我工作的地方,我们的系统使用的是.NET 2.0框架,并且很快就无法升级.有没有其他解决方案不依赖.NET 3.5框架,除了我能想到的最明显的解决方案:
new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);
Run Code Online (Sandbox Code Playgroud) 我有以下数组
let registrations = [
{user:1, reg_on:'12/02/2009'},
{user:10, reg_on:'11/02/2009'},
{user:5, reg_on:'11/02/2109'},
///others
]
Run Code Online (Sandbox Code Playgroud)
因此,现在尝试查找一个用户为1或5的记录,即第一个
所以我做了以下工作
let final = registrations.find(reg=>reg.user === 1 ||reg.user === 5);
Run Code Online (Sandbox Code Playgroud)
上面的方法有效,但是如果需要添加更多的过滤器参数(如reg.user === 10),则变得很乏味。
所以我试图像这样重构
let final = registrations.find(reg=>reg.user.includes([1,5,10]));
Run Code Online (Sandbox Code Playgroud)
但是现在,包含一个的行不通了。我错过了什么?