Check if an element is present in an array
我现在使用的功能是检查以下内容:
1 2 3 4 5 6 7 8 9 | function inArray(needle,haystack) { var count=haystack.length; for(var i=0;i<count;i++) { if(haystack[i]===needle){return true;} } return false; } |
它起作用了。我要找的是是否有更好的方法。
ECMAScript 2016年incorporates安
1 2 3 | [1, 2, 3].includes(2); // true [1, 2, 3].includes(4); // false [1, 2, 3].includes(1, 2); // false (second parameter is the index position in this array at which to begin searching) |
As of 2018年七月,这已被implemented几乎全在大browsers,如果你需要一个支持IE polyfill是可用的。 </P >
代码: </P >
1 2 3 | function isInArray(value, array) { return array.indexOf(value) > -1; } |
执行: </P >
1 | isInArray(1, [1,2,3]); // true |
更新(2017年): </P >
在现代browsers这遵循ECMAScript(ES7在2016年)的标准,你可以使用函数array.prototype.includes,这让它更easier通到检查如果一个item is present在西安阵列: </P >
1 2 3 4 | const array = [1, 2, 3]; const value = 1; const isInArray = array.includes(value); console.log(isInArray); // true |
</P >
是的
1 | haystack.indexOf(needle) >= 0 |
如果你想支持在互联网explorers(<IE9的),你将不得不包含你的代码流作为一种workaround虽然。。。。。。。 </P >
除非你的清单是sorted,你需要对每一个compare值的针。因此,你的
我benchmarked它多的时代,是谷歌的铬52,但感觉很自由的copypaste它为任何其他浏览器的控制台。 </P > ~1500多发性硬化,包括(~2700多发性硬化,当我过去的polyfill)
1 2 3 4 5 6 7 8 9 | var array = [0,1,2,3,4,5,6,7,8,9]; var result = 0; var start = new Date().getTime(); for(var i = 0; i < 10000000; i++) { if(array.includes("test") === true){ result++; } } console.log(new Date().getTime() - start); |
多发性硬化1050~,指标的数量关系
1 2 3 4 5 6 7 8 9 | var array = [0,1,2,3,4,5,6,7,8,9]; var result = 0; var start = new Date().getTime(); for(var i = 0; i < 10000000; i++) { if(array.indexOf("test") > -1){ result++; } } console.log(new Date().getTime() - start); |
~ 650多发性硬化,自定义函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function inArray(target, array) { /* Caching array.length doesn't increase the performance of the for loop on V8 (and probably on most of other major engines) */ for(var i = 0; i < array.length; i++) { if(array[i] === target) { return true; } } return false; } var array = [0,1,2,3,4,5,6,7,8,9]; var result = 0; var start = new Date().getTime(); for(var i = 0; i < 10000000; i++) { if(inArray("test", array) === true){ result++; } } console.log(new Date().getTime() - start); |
单行代码…………………将返回true或false </P >
1 | !!(arr.indexOf("val")+1) |
你可以使用
1 2 3 | function isInArray(value, array) { return array.indexOf(value) > -1; } |
执行: </P >
1 | isInArray(1, [1,2,3]); // true |
我suggest你使用下面的代码: </P >
1 2 3 4 5 6 7 8 | function inArray(needle, haystack) { var length = haystack.length; for (var i = 0; i < length; i++) { if (haystack[i] == needle) return true; } return false; } |
你可以使用_ contains函数从underscore.js:这个库的实现 </P >
1 2 3 | if (_.contains(haystack, needle)) { console.log("Needle found."); }; |
由于ecmascript6,一个可以使用的设置: </P >
1 2 3 4 | var myArray = ['A', 'B', 'C']; var mySet = new Set(myArray); var hasB = mySet.has('B'); // true var hasZ = mySet.has('Z'); // false |
depending是大小的针,你要找的
1 2 3 4 5 | let filtered, arr = ['Haystack', 'Needle']; filtered = arr.filter((elem) => { return elem.toLowerCase() === 'needle'; }); // filtered => ['needle'] |
在lodash你可以使用_ .includes(这也aliases到_ .contains) </P >
你可以搜索在整个阵列: </P >
1 | _.includes([1, 2, 3], 1); // true |
你可以搜索数组从一个初始指标: </P >
1 | _.includes([1, 2, 3], 1, 1); // false (begins search at index 1) |
搜索一个字符串: </P >
1 | _.includes('pebbles', 'eb'); // true (string contains eb) |
工厂检查方法也简单翼的研究对象: </P >
1 2 | _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); // true _.includes({ 'user': 'fred', 'age': false }, false); // true |
一件事情的注意,关于最后的案例是真实的厂用primitives状的字符串,数字和布尔值,但不能一翼或对象的搜索 </P >
1 2 | _.includes({ 'user': 'fred', 'age': {} }, {}); // false _.includes({ 'user': [1,2,3], 'age': {} }, 3); // false |