就是判断一个元素是否存在于数组中的函数,既然js里string都有indexOf
函数,为什么不在Array
对象里设置一个这样的函数呢,其实就用indexOf
这个思想挺好的,不知道制定JS标准的人是基于什么考虑,把这样一个如此常用的功能没考虑在内的。
各位有什么好办法来实现这个功能吗?
伊谢尔伦2017-04-10 12:44:35
用 github 上的项目来回答问题。 欢迎关注 github那些事儿
php.js implements PHP functions in JavaScript。github 地址:https://github.com/kvz/phpjs
巴扎黑2017-04-10 12:44:35
indexOf在ECMAScript 5th中是有的,参考:https://developer.mozilla.org/en-US/d...
if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { "use strict"; if (this == null) { throw new TypeError(); } var t = Object(this); var len = t.length >>> 0; if (len === 0) { return -1; } var n = 0; if (arguments.length > 1) { n = Number(arguments[1]); if (n != n) { // shortcut for verifying if it's NaN n = 0; } else if (n != 0 && n != Infinity && n != -Infinity) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } } if (n >= len) { return -1; } var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); for (; k < len; k++) { if (k in t && t[k] === searchElement) { return k; } } return -1; }
其实不止indexOf,lastIndexOf,filter,forEach,every,map,some等等在ECMAScript 5th 中都有实现, 各个javascript库也有相关的代码,可以去看看。
天蓬老师2017-04-10 12:44:35
jQuery中有类似的函数:http://docs.jquery.com/Utilities/jQue...
它的代码如下:
function inArray(needle, haystack) { var length = haystack.length; for(var i = 0; i < length; i++) { if(haystack[i] == needle) return true; } return false; }
大家讲道理2017-04-10 12:44:35
underscore.js 是一个非常强大的js库,增添了很多js强化功能,同时也是很多js开源项目的基础库——例如著名的mvc框架Backbone.js。
其中有求元素在array中的索引的方法
http://underscorejs.org/#indexOf
_.indexOf(array, value, [isSorted]) _.indexOf([1, 2, 3], 2); => 1
阿神2017-04-10 12:44:35
如果你的数组里都是纯数字的话,那么告诉你一个比较简便的方法
// 比如判断2312是否在这个数组中 ('|' + [2312,3331,423456].join('|') + '|').indexOf('|' + 2312 + '|')