如何检查一个特定的字符是否在javascript字符串数组中可用

How to check if a particular characters are available in a javascript string array

本文关键字:javascript 是否 字符串 数组 字符 检查 何检查 一个      更新时间:2023-09-26

我有一个像

这样的javascript数组
var main_array = ["allen~1", "ajay~2", "raj~3"];

还有一个数组,比如

var sub_array=["allen", "ajay"];

编辑

我需要检查是否在main_array中找到sub_array的每个值,(即)是否'allen'在["allen~1", "ajay~2", "raj~3"]中找到所以不匹配的值必须从数组中删除。因此"raj~3"必须从main_array

中删除。

如何实现这一点?

我有尝试indexOf(), match()但失败了,因为它期望像"allen~1"这样的精确匹配…

Thanks in advance

你的问题是善良的,如果不是那么清楚,但我认为你想要实现的是一个数组,其中包含所有值从main_array这是sub_array的一部分?在您的示例中,结果数组应该是

["allen~1", "ajay~2"]

?

则需要遍历子数组,并检查main_array:

var i, j, result = [];
for (i = 0; i < sub_array.length; i++) {
  for (j = 0; j < main_array.length; j++) {
    if (main_array[j].indexOf(sub_array[i]) != -1) {
      result.push(main_array[j]);
    }
  }
}

查看工作jsfiddle: http://jsfiddle.net/yf7Dw/

编辑:Felix Kings的答案可能是最好的,但如果你不想使用polyfills,必须支持旧的IE,你可以使用我的解决方案

edit2:数组。如果你想从主数组中删除元素,Splice是你的朋友。查看更新后的小提琴:http://jsfiddle.net/yf7Dw/2/

var i, j;
for (i = 0; i < sub_array.length; i++) {
  for (j = 0; j < main_array.length; j++) {
    if (main_array[j].indexOf(sub_array[i]) != -1) {
      main_array.splice(j, 1);
    }
  }
}

您可以使用.every <一口> [MDN] .some <一口> [MDN] :

var all_contained = sub_array.every(function(str) {
    return main_array.some(function(v) {
        return v.indexOf(str) > -1;
    });
});

查看旧版本IE的polyfills文档


如果要删除元素,可以使用.filter [MDN]和正则表达式:

// creates /allen|ajay/
var pattern = new RegExp(sub_array.join('|'));
var filtered = main_array.filter(function(value) {
    return pattern.test(value);
});

测试返回false的值不包括在最终数组中。

如果sub_array中的值可以包含特殊的正则表达式字符,则必须先进行转义:Javascript中是否有RegExp.escape函数?

根据搜索的字符串构建RegExp并使用match

string.match(new RegExp(searchedString + ".*"));

string.match(new RegExp(searchedString + "~[0-9]+"));

try

var globalBoolean  =true;
$.each(subarray, function (index,value) {
    if ( !($.inArray(value, main_array) > -1)){
     globalBoolean =false;
    }
});

如果globalBooleantrue则相等。

try

            var main_array = ["allen~1", "ajay~2", "raj~3"];
        var main_array1 = new Array();
        for (var i = 0; i < main_array.length; i++) {
            main_array1.push(main_array[i].split('~')[0])
        }
        var sub_array = ["allen", "ajay"];
        if ($.inArray('allen', main_array1) == -1) {
            alert('false');
        }
        else {
            alert('true');
        }

又一个解决方案…

var filtered_array = jQuery.grep(main_array, function(n1, i1){
    var y = jQuery.grep(sub_array, function(n2, i2){
        return n1.indexOf(n2) !== -1; // substring found?
    });
    return y.length; // 0 == false
});

获取下划线js。然后这样做:

var myarray = ["Iam","Iamme","meIam"];
var sub_ar = ["am", "amI", "amme"];
_.each(myarray, function(x){
    _.each(sub_ar, function(y){
        if(x == y)
        {
           console.log(y + " is a match");
    });
 });

抱歉。这不会工作,因为你正在寻找子字符串。我的坏。试试这个:

var myarray = ["Iam","Iamme","meIam"];
var sub_ar = ["am", "amI", "amme"];
_.each(myarray, function(x){
   _.each(sub_ar, function(y){
      if(x.indexOf(y) !== -1)
      {
        console.log("match found");
   });
});