检查javascript中的字符串数组是否包含子字符串

时间:2017-06-08 15:50:50

标签: javascript arrays element

我对这个任务有点困惑 我有这样一个数组: array = [“123”,“456”,“#123”] 我想找到包含#的元素。我使用了array.includes("#")array.indexOf("#"),但它没有用 任何想法??

3 个答案:

答案 0 :(得分:11)

因为包含会比较'#'每个数组元素。

如果您想查找是否想要获得完全元素,请尝试使用somefind



.xls




答案 1 :(得分:2)

由于标题和帖子正文不同,这里似乎有多个问题。你想知道数组是否有一个元素或者你想获取元素本身吗?如果你想获取一个元素,你想要哪个(哪些)元素——第一次出现、最后一次出现还是所有出现的数组?

这篇文章旨在作为未来访问者的资源,这些访问者可能不一定希望 find(即返回左侧的第一个元素)如顶部答案所示。为了详细说明该答案,在布尔上下文中不加选择地将 some 替换为 find 有一个问题——返回的元素可能是错误的,如

if ([5, 6, 0].find(e => e < 3)) { // fix: use `some` instead of `find`
  console.log("you might expect this to run");
}
else {
  console.log("but this actually runs " +
    "because the found element happens to be falsey");
}

请注意,e => e.includes("#") 可以替换为任何谓词,因此它在很大程度上是问题的附带条件。


是否有任何元素与谓词匹配?

const array = ["123", "456", "#123"];
console.log(array.some(e => e.includes("#"))); // true
console.log(array.some(e => e.includes("foobar"))); // false

MDN: Array.prototype.some()

是否每个元素都匹配谓词?

const array = ["123", "456", "#123"];
console.log(array.every(e => e.includes("#"))); // false
console.log(array.every(e => /\d/.test(e))); // true

MDN: Array.prototype.every()

与谓词匹配的第一个元素是什么?

const array = ["123", "456", "#123", "456#"];
console.log(array.find(e => e.includes("#"))); // "#123"
console.log(array.find(e => e.includes("foobar"))); // undefined

MDN: Array.prototype.find()

与谓词匹配的第一个元素的索引是什么?

const array = ["123", "456", "#123", "456#"];
console.log(array.findIndex(e => e.includes("#"))); // 2
console.log(array.findIndex(e => e.includes("foobar"))); // -1

MDN: Array.prototype.findIndex()

与谓词匹配的所有元素是什么?

const array = ["123", "456", "#123", "456#"];
console.log(array.filter(e => e.includes("#"))); // ["#123", "456#"]
console.log(array.filter(e => e.includes("foobar"))); // []

MDN: Array.prototype.filter()

与谓词匹配的所有元素的索引是什么?

const filterIndices = (a, pred) => a.reduce((acc, e, i) => {
  pred(e, i, a) && acc.push(i);
  return acc;
}, []);

const array = ["123", "456", "#123", "456#"];
console.log(filterIndices(array, e => e.includes("#"))); // [2, 3]
console.log(filterIndices(array, e => e.includes("foobar"))); // []

MDN: Array.prototype.reduce()

与谓词匹配的最后一个元素是什么?

const findLast = (a, pred) => {
  for (let i = a.length - 1; i >= 0; i--) {
    if (pred(a[i], i, a)) {
      return a[i];
    }
  }
};

const array = ["123", "456", "#123", "456#"];
console.log(findLast(array, e => e.includes("#"))); // "456#"
console.log(findLast(array, e => e.includes("foobar"))); // undefined

与谓词匹配的最后一个元素的索引是什么?

const findLastIndex = (a, pred) => {
  for (let i = a.length - 1; i >= 0; i--) {
    if (pred(a[i], i, a)) {
      return i;
    }
  }

  return -1;
};

const array = ["123", "456", "#123", "456#"];
console.log(findLastIndex(array, e => e.includes("#"))); // 3
console.log(findLastIndex(array, e => e.includes("foobar"))); // -1

答案 2 :(得分:1)

您可以使用filter()。

    var array = ["123", "456", "#123"];

    console.log(array.filter(function(item){
        var finder = '#';
        return eval('/'+finder+'/').test(item);
    }));

通过传递函数,您可以过滤并返回与您要查找的元素相匹配的元素。

在这个例子中,我使用了eval(),只是因为获取字符串使用RegExp,但可以使用==运算符进行提取。