登录

javascript怎样实现类似php中in_array()的功能

就是判断一个元素是否存在于数组中的函数,既然js里string都有indexOf函数,为什么不在Array对象里设置一个这样的函数呢,其实就用indexOf这个思想挺好的,不知道制定JS标准的人是基于什么考虑,把这样一个如此常用的功能没考虑在内的。

各位有什么好办法来实现这个功能吗?

# JavaScript
伊谢尔伦伊谢尔伦2173 天前626 次浏览

全部回复(7) 我要回复

  • PHP中文网

    PHP中文网2017-04-10 12:44:35

    我不会告诉你有这么一个网站的:http://phpjs.org/ 哈哈

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 12:44:35

    用 github 上的项目来回答问题。 欢迎关注 github那些事儿


    php.js implements PHP functions in JavaScript。github 地址:https://github.com/kvz/phpjs

    回复
    0
  • 巴扎黑

    巴扎黑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库也有相关的代码,可以去看看。

    回复
    0
  • 天蓬老师

    天蓬老师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;
    }

    回复
    0
  • 大家讲道理

    大家讲道理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

    回复
    0
  • 阿神

    阿神2017-04-10 12:44:35

    如果你的数组里都是纯数字的话,那么告诉你一个比较简便的方法

    // 比如判断2312是否在这个数组中
    ('|' + [2312,3331,423456].join('|') + '|').indexOf('|' + 2312 + '|')

    回复
    0
  • PHP中文网

    PHP中文网2017-04-10 12:44:35

    模拟实现哦

    回复
    0
  • 取消回复发送