检查布尔键是否存在并将其包含在 if 语句中的最有效方法
Most efficient way to check if boolean key exists and include it in if statement
这里有两个对象:
var user1 = { test: true }
var user2 = { nope : "noper" }
var user3 = { test: false }
我想检查所有三个对象的测试是否为真。这是最有效的方法吗?(假设我有 100k + 对象)
var users = [user1, user2, user3]
var users_length = users.length
for(var i = 0; i < users_length; i++)
if(("test" in users[i]) && users[i].test) { //evals to true }
您可以使用返回 true 的 Array.every()
当且仅当函数参数对所有数组元素返回 true。
var user1 = { test: true }
var user2 = { nope: "noper" }
var users = [user1, user2]
var result = users.every( function( user ) {
return user.test;
});
console.log( result );
虽然如果你总是只有两个对象,那么user1.test && user2.test
就简单多了。
(请注意,"test" in users[i] && users[i].test
是多余的,因为如果元素test
不存在,那么users[i].test
将是假的(未定义)。
首先,缓存长度在任何现代浏览器中都是无用的(IE8除外)。JIT 可以轻松地自行缓存它。
最有效的代码是:
for(var i = users.length-1; i; i--) { // Reversed iteration is little bit faster
if((Object.prototype.hasOwnProperty.call(users[i], 'test') && users[i].test) {
// Your code goes here
}
}
就个人而言,我会做这样简单的事情:
var user1 = { test: true }
var user2 = { nope : "noper" }
var user3 = { test: false }
var users = [user1, user2, user3]
var result = true;
for(var i = 0, j = users.length; i < j; i++){
result = result && !!users[i].test
if (!result){
break;
}
}
alert(result);
(这假设您希望在对象上不存在属性"test"时返回 false)
这会缓存数组的长度,因此不会计算每个循环执行,然后在遇到 false 时中断,因为如果是这种情况,则没有继续的意义。这应该会给你更好的性能。这!!将测试属性的值强制转换为"and"到结果的布尔值(由于它下面的错误检查,这不是严格需要的,但我喜欢添加它,以便最终结果是一个布尔值)。
http://jsfiddle.net/jkyftjpu/
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 如何在 API 调用后和 if 语句中启用提交按钮
- 带有多个elseif的Javascript if语句
- Sharepoint JScript if语句未执行
- Javascript:If-then语句在函数中不起作用
- for循环中的javascript if语句找不到==
- jquery if语句返回return wong语句
- 在if语句下的html中使用javascript变量
- 将错误与if语句混淆
- 如何检查if/else语句中的随机条件
- 循环通过数组的If语句不起作用
- jQuery模板中的If语句
- 如何从数据库中回显If语句
- 如何减少if语句的数量
- Node.js-承诺和锥形语句(if、switch等)-如何构建
- 如何在嵌套ng重复指令中使用控制语句(if语句)
- 如何创建语句if包含"&"
- If语句- If主体有一个类remove在滚动原生javascript
- Javascript中的if语句- if - else问题