0

我有一个像

var main_array = ["allen~1", "ajay~2", "raj~3"];

我有另一个数组

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

编辑

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

如何做到这一点?

尝试过 indexOf(), match()但失败了,因为它期望像“allen~1”这样的完全匹配。

提前致谢

4

7 回答 7

1

如果不是很清楚,您的问题很友好,但我认为您想要实现的是一个数组,其中包含来自 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:如果你想从主数组中删除元素,Array.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);
    }
  }
}
于 2013-06-11T09:55:02.353 回答
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 函数吗?.

于 2013-06-11T09:50:17.440 回答
0

获取下划线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");
   });
});
于 2013-06-11T10:04:30.283 回答
0

尝试

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

如果globalBooleantrue则相等。

于 2013-06-11T09:45:42.390 回答
0

尝试

            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');
        }
于 2013-06-11T09:54:42.843 回答
0

只是另一种解决方案...

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
});
于 2013-06-11T10:01:44.657 回答
0

RegExp从搜索到的字符串构建一个并使用match

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

或者

string.match(new RegExp(searchedString + "~[0-9]+"));
于 2013-06-11T09:49:27.400 回答