在数组中查找子串 - javascript

时间:2016-11-23 08:44:37

标签: javascript arrays string substring

我需要在数组中找到子字符串。 如果我有一个数组:"abc", "abcd", "abcde",该方法应该返回数组成员:{{1}},因为每个是子字符串或另一个的超字符串,但它应该排除" xyz" 。 什么是javascript中最好的方法。

3 个答案:

答案 0 :(得分:4)

使用Array#filter

var arr = ["abc", "abcd", "abcde", "xyz"];

console.log(arr.filter(function(el) {
  return el.indexOf('abc') > -1;
}));

修改:如果您想根据当前元素的数组中的某些值进行过滤,请使用Array#some

var arr = ["abc", "abcd", "abcde", "xyz"];

console.log(arr.filter(function(el, index) {
  return arr.some(function(e, i) {
    if (i !== index) {
      return e.indexOf(el) > -1 || el.indexOf(e) > -1;
    }
    return false;
  })
}));

答案 1 :(得分:1)

您可以简单地使用2个嵌套循环,但复杂度为O(n ^ 2)



function find_substrings(arr) {
    var res = [];
    for (var i=0; i<arr.length; i++) {
        for (var j=0; j<arr.length; j++) {
            if (i !== j && (arr[i].indexOf(arr[j]) > -1 || arr[j].indexOf(arr[i]) > -1)) {
                res.push(arr[i]);
                break;
            }
        }
    }
    return res;
}
var arr = ["abc", "abcd", "abcde", "xyz"];
console.log(find_substrings(arr));
   
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用一些带有快捷方式的优化循环和一个物品对象。

var data = ["abc", "abcd", "42", "abcde", "422", "xyz", "q", "1q"],
    result = function (array) {
        var i, j,
            r = {};

        for (i = 0; i < array.length - 1; i++) {
            if (r[array[i]]) {
                continue;
            }
            for (j = i + 1; j < array.length; j++) {
                if (r[array[j]]) {
                    continue;
                }
                if (array[i].indexOf(array[j]) !== -1 || array[j].indexOf(array[i]) !== -1) {
                    r[array[i]] = true;
                    r[array[j]] = true;
                }
            }
        }
        return array.filter(function (a) { return r[a]; });
    }(data);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }