找出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
JavaScript中的值是什么'falsey',这意味着它们在表达式中评估为false if(value),value ?并且!value?
关于Stack Overflow上的falsey值的目的已有一些讨论,但没有详尽的完整答案列出所有的falsey值.
我在MDN JavaScript Reference上找不到任何完整列表,我很惊讶地发现在JavaScript中查找完整,权威的虚假值列表时的最佳结果是博客文章,其中一些有明显的遗漏(例如,NaN),并且没有一个像Stack Overflow这样的格式,可以添加评论或替代答案来指出怪癖,惊喜,遗漏,错误或警告.因此,制作一个似乎是有意义的.
每个JS意见领袖都说扩展原生对象是一种不好的做法.但为什么?我们是否获得了性能?他们是否害怕有人以"错误的方式"做到这一点,并添加了可枚举的类型Object,几乎破坏了任何对象上的所有循环?
以TJ Holowaychuk的should.js为例.他增加了一个简单的getter来Object,一切工作正常(来源).
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(Object(this).valueOf());
},
configurable: true
});
Run Code Online (Sandbox Code Playgroud)
这真的很有道理.例如,可以扩展Array.
Array.defineProperty(Array.prototype, "remove", {
set: function(){},
get: function(){
return removeArrayElement.bind(this);
}
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Run Code Online (Sandbox Code Playgroud)
是否有任何反对扩展本机类型的论据?
密钥集合(Set,Map,WeakSet和WeakMap)的ES6规范提供了什么时间复杂度(以大O表示法)?
我的期望,并且我希望大多数开发人员都希望,规范和实现将使用广泛接受的性能算法,在这种情况下Set.prototype.has,add并且delete在一般情况下都是O(1).相同的Map和Weak–等价物.
对于我来说,实现的时间复杂性是否是强制性的,例如在ECMAScript 2015语言规范 - 第6版 - 23.2设置对象中,这一点并不完全清楚.
除非我误解它(我当然很可能),看起来ECMA规范要求实现(例如Set.prototype.has)使用线性时间(O(n))算法.令我非常惊讶的是,规范中不会强制要求甚至不允许使用更高性能的算法,我会对为什么会出现这种情况的解释非常感兴趣.
什么是将一个值与多个选项进行比较的最漂亮的方法?
我知道有很多方法可以做到这一点,但我正在寻找最好的方法.
我问,因为我希望这是可行的(当你看它时,它显然不是这样):
if (foobar == (foo||bar) ) {
//do something
}
Run Code Online (Sandbox Code Playgroud) 是否有更简单的方法来确定变量是否等于一系列值,例如:
if x === 5 || 6
Run Code Online (Sandbox Code Playgroud)
而不是像以下那样钝的东西:
if x === 5 || x === 6
Run Code Online (Sandbox Code Playgroud)
?
考虑以下:
var a = 'jesus';
if(a == 'something' || a == 'nothing' || a=='anything' || a=='everything'){
alert('Who cares?');
}
Run Code Online (Sandbox Code Playgroud)
有没有办法缩短它?
Javascript中有什么东西if (a=='bbb'||'ccc')吗?
另外,jQuery可以在这里帮忙吗?
有没有更好的方法在javascript中编写以下条件?
if ( value == 1 || value == 16 || value == -500 || value == 42.42 || value == 'something' ) {
// blah blah blah
}
Run Code Online (Sandbox Code Playgroud)
我讨厌把所有这些逻辑OR串在一起.我想知道是否有某种速记.
谢谢!
首先,我是javascript方面的新手.请告诉我有没有简单的方法来形成以下代码.
if( fileName== 'doc' || fileName=='docx' || fileName=='xls' || fileName=='xlsx' || fileName=='ppt' || fileName=='pdf' ){
Do something
} else{
Do something
}
Run Code Online (Sandbox Code Playgroud) 我有一长串字符串可以与同一个变量进行比较.
有没有更短的方法来做到这一点?
if(val=="kivi" || val=="apples" || val=="lychee" || val=="banana.C" || val=="mangos")
Run Code Online (Sandbox Code Playgroud) javascript ×10
jquery ×3
comparison ×2
algorithm ×1
arrays ×1
ecmascript-6 ×1
if-statement ×1
prototype ×1