array.includes("#")
和array.indexOf("#")
,但它没有用
任何想法??
答案 0 :(得分:11)
答案 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
const array = ["123", "456", "#123"];
console.log(array.every(e => e.includes("#"))); // false
console.log(array.every(e => /\d/.test(e))); // true
const array = ["123", "456", "#123", "456#"];
console.log(array.find(e => e.includes("#"))); // "#123"
console.log(array.find(e => e.includes("foobar"))); // undefined
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"))); // []
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"))); // []
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,但可以使用==运算符进行提取。