我需要在数组中找到子字符串。
如果我有一个数组:"abc", "abcd", "abcde"
,该方法应该返回数组成员:{{1}},因为每个是子字符串或另一个的超字符串,但它应该排除" xyz" 。
什么是javascript中最好的方法。
答案 0 :(得分:4)
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;
答案 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; }