我需要在 javascript 中搜索一个数组。搜索将仅匹配字符串的一部分,因为该字符串将分配有附加编号。然后我需要用完整的字符串返回成功匹配的数组元素。
IE
var windowArray = new Array ("item","thing","id-3-text","class");
我需要在其中搜索数组元素,"id-"
并且我还需要提取元素中的其余文本(即。"id-3-text"
)。
谢谢
我需要在 javascript 中搜索一个数组。搜索将仅匹配字符串的一部分,因为该字符串将分配有附加编号。然后我需要用完整的字符串返回成功匹配的数组元素。
IE
var windowArray = new Array ("item","thing","id-3-text","class");
我需要在其中搜索数组元素,"id-"
并且我还需要提取元素中的其余文本(即。"id-3-text"
)。
谢谢
如果你能使用Underscore.js在你的项目中,_.filter()阵列的功能,使这个瞬间:
// find all strings in array containing 'thi'
var matches = _.filter(
[ 'item 1', 'thing', 'id-3-text', 'class' ],
function( s ) { return s.indexOf( 'thi' ) !== -1; }
);
迭代器函数可以做任何你想做的事情,只要它为匹配返回 true。效果很好。
2017-12-03 更新:
现在这是一个非常过时的答案。以大批量的也许不是性能最好的选择,但它可以写成一个很多更简洁,并使用原生ES6数组/字符串的方法,如.filter()
与.includes()
现在:
// find all strings in array containing 'thi'
const items = ['item 1', 'thing', 'id-3-text', 'class'];
const matches = items.filter(s => s.includes('thi'));
注意:没有 <= IE11 支持String.prototype.includes()
(Edge 工作,请注意),但是您可以使用 polyfill,或者只是回退到indexOf()
.
这里的人让这件事太难了。只需执行以下操作...
myArray.findIndex(element => element.includes("substring"))
findIndex()是一种 ES6 高阶方法,它遍历数组的元素并返回匹配某些条件的第一个元素的索引(作为函数提供)。在这种情况下,我使用 ES6 语法来声明高阶函数。element
是函数的参数(可以是任何名称),粗箭头将后面的内容声明为匿名函数(不需要用大括号括起来,除非它占用多于一行)。
在里面,findIndex()
我使用了非常简单的includes()
方法来检查当前元素是否包含您想要的子字符串。
从给定数组中获取子字符串数组的最简单方法是使用 filter 并包括:
myArray.filter(element => element.includes("substring"));
上面的将返回一个子字符串数组。
myArray.find(element => element.includes("substring"));
上面的将返回数组中的第一个结果元素。
myArray.findIndex(element => element.includes("substring"));
上面的将返回数组中第一个结果元素的索引。
在您的特定情况下,您只需使用一个无聊的旧计数器即可:
var index, value, result;
for (index = 0; index < windowArray.length; ++index) {
value = windowArray[index];
if (value.substring(0, 3) === "id-") {
// You've found it, the full text is in `value`.
// So you might grab it and break the loop, although
// really what you do having found it depends on
// what you need.
result = value;
break;
}
}
// Use `result` here, it will be `undefined` if not found
但是,如果您的数组是sparse,您可以使用适当设计的for..in
循环更有效地执行此操作:
var key, value, result;
for (key in windowArray) {
if (windowArray.hasOwnProperty(key) && !isNaN(parseInt(key, 10))) {
value = windowArray[key];
if (value.substring(0, 3) === "id-") {
// You've found it, the full text is in `value`.
// So you might grab it and break the loop, although
// really what you do having found it depends on
// what you need.
result = value;
break;
}
}
}
// Use `result` here, it will be `undefined` if not found
当心for..in
没有hasOwnProperty
和!isNaN(parseInt(key, 10))
检查的幼稚循环;这就是为什么。
题外话:
另一种写法
var windowArray = new Array ("item","thing","id-3-text","class");
是
var windowArray = ["item","thing","id-3-text","class"];
...这对您来说打字更少,也许(这一点是主观的)更容易阅读。这两个语句具有完全相同的结果:包含这些内容的新数组。
只需搜索普通旧字符串 indexOf
arr.forEach(function(a){
if (typeof(a) == 'string' && a.indexOf('curl')>-1) {
console.log(a);
}
});