找出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对象或数组中是否存在特定键?
如果某个密钥不存在,并且我尝试访问它,它会返回false吗?或抛出错误?
我有一个字符串数组和一个字符串.我想针对数组值测试此字符串并应用条件结果 - 如果数组包含字符串do"A",否则执行"B".
我怎样才能做到这一点?
在其他帖子中搜索答案后,我觉得我必须问这个问题.我看了如何检查数组是否包含JavaScript中的对象? 以及查找项目是否在JavaScript数组中的最佳方法?并且无法让代码在那里工作.
我正在将一个html嵌入代码捕获到一个数组中,因此每个项目都是一行html代码.
例如:
i[0]='<param name=\"bgcolor\" value=\"#FFFFFF\" />'
i[1]='<param name=\"width" value=\"640\" />'
i[2]='<param name=\"height\" value=\"360\" />'
i[3]='more html code'
Run Code Online (Sandbox Code Playgroud)
我想搜索这个数组,找到"高度"这个词的行.
理想情况下,我想编写一个函数来返回出现'height'的项目的索引.
幸运的是,此数组中没有重复项,因此只有一次出现.
通过简单的对象搜索我得到'假'回报.
任何的想法?
可能重复:
在Javascript数组中测试值在JavaScript数组
中查找项目的最佳方法?
Javascript - array.contains(obj)
我通常在python中编程,但最近开始学习JavaScript.
在python中,这是一个完全有效的if语句:
list = [1,2,3,4]
x = 3
if x in list:
print "It's in the list!"
else:
print "It's not in the list!"
Run Code Online (Sandbox Code Playgroud)
但是我在Javascript中做了同样的事情.
如何在JavaScript中检查x是否在列表中?
我经常需要搜索包含对象的javascript数组.我想在数组中搜索具有属性匹配的对象.例如,在Person对象的数组中搜索person的id/key ==="ABC123"
使用$ .each方法使用jQuery可以很容易地完成它,这是我所确定的.你可以在jsFiddle中看到这里的例子.http://jsfiddle.net/johnpapa/EJAFG/
我想知道是否有其他人找到了更快和/或更好的方法来做到这一点?
var Person = function(code, name) {
this.code = code;
this.name = name;
};
var people = [
new Person("ABC123", "Tooth Fairy"),
new Person("DEF456", "Santa Claus"),
new Person("PIR000", "Jack Sparrow"),
new Person("XYZ987", "Easter Bunny")
];
var utils = {};
// Could create a utility function to do this
utils.inArray = function(searchFor, property) {
var retVal = -1;
$.each(this, function(index, item) {
if (item.hasOwnProperty(property)) {
if (item[property].toLowerCase() === searchFor.toLowerCase()) {
retVal = index;
return false;
} …Run Code Online (Sandbox Code Playgroud) 是否可以将用户的选择限制为Bootstrap Typeahead项的预定义数据源项?因此,如果用户键入了不在数据源中的内容,则会显示一条消息,通知他们这样做?
在一个老问题之后,我仍然有一个问题:
a = ["apple", "banana", "orange", "apple"];
a.indexOf("apple") = 0
Run Code Online (Sandbox Code Playgroud)
在数组中找到"apple"元素的BOTH索引的最简单方法是什么?我想立刻删除它们 - 这可能吗?
在阅读了许多类似问题后:
我还有一个问题:假设我有一个很大的字符串数组(几千个),我必须进行多次查找(即多次检查一个给定的字符串是否包含在这个数组中).在Node.js中执行此操作的最有效方法是什么?
A.排序字符串数组,然后使用二进制搜索?要么:
B.将字符串转换为对象的键,然后使用"in"运算符
?
我知道A的复杂度是O(log N),其中N是字符串的数量.
但我不知道B的复杂性.
如果Javascript对象被实现为哈希表,则B的复杂度平均为O(1),这比A好.但是,我不知道Javascript对象是否真的实现为哈希表!
我正在尝试创建一个名为 addTrack 的方法,具有以下功能:
\n\n如果 id 是新的,则将歌曲添加到播放列表的末尾。
设置播放列表的新状态。
如果我使用代码 #1 而不是代码 #2,会有什么区别?
\n\nPlaylistTracks 在构造函数中定义如下:
\n\nplaylistTracks: [{ name: 'name1', artist: 'artist1', album: 'album1', id: 1 },\n { name: 'name2', artist: 'artist2', album: 'album2', id: 2 },\n ]\nRun Code Online (Sandbox Code Playgroud)\n\n代码#1
\n\naddTrack(track){\nif (this.state.playlistTracks.includes(this.props.track.id)) {return;}\nelse {this.state.playlistTracks.push(track);\n this.setState({playlistTracks:this.state.playlistTracks});\n}\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n\n代码#2
\n\naddTrack(track) {\nif (this.state.playlistTracks.find(savedTrack => savedTrack.id===track.id) {return;}\nelse {return this.state.playlistTracks.push(track);}\nthis.setState(playlistTracks:this.state.playlistTracks)}\nRun Code Online (Sandbox Code Playgroud)\n