我有这样一个数组:
var array = ["xs-1", "sm-10", "md-4"];现在,我想得到一个特定值末尾的数字。例如,我想在数组中搜索"md-"并查看字符串末尾的数字(应该返回4)。
我不能做array.indexOf("xs-"),因为这不是全部价值。有办法这样做吗?
发布于 2014-10-20 14:50:01
您可以创建一个使用要查找的前缀、数组和拆分字符的方法,并返回数组中的所有数字:
function findNumberFromPrefix(prefix, arr, splitChar) {
var values = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i].indexOf(prefix) === 0) {
values.push(arr[i].split(splitChar)[1]);
}
}
return values;
}并称之为:
var array = ["xs-1", "sm-10", "md-4"];
var values = findNumberFromPrefix("md-", array, "-");
console.log(values); //["4"]演示:http://jsfiddle.net/rn4h9msh/
发布于 2014-10-20 14:51:01
使用for循环:
var array = ["xs-1", "sm-10", "md-4"];
var search = "md-";
var found = null;
for (var i = 0; i < array.length; i++) {
if (array[i].indexOf(search) === 0) {
found = array[i];
break; // Note: this is assuming only one match exists - or at least you are
// only interested in the first match
}
}
if (found) {
alert(found);
} else {
alert("Not found");
}
使用.filter
var array = ["xs-1", "sm-10", "md-4"];
var search = "md-";
var filtered = array.filter(function(item) {
return item.indexOf(search) === 0;
});
// note that here filtered will contain all matched elements, so it might be more than
// one match.
alert(filtered);
根据@János的建议,可以使用.reduce轻松地将数组转换为对象:
var array = ["xs-1", "sm-10", "md-4"];
var search = "md";
var obj = array.reduce(function(prev, item) {
var cells = item.split("-");
prev[cells[0]] = cells[1];
return prev;
}, {});
// note: at this point we have an object that looks like this:
// { xs:1, sm:10, md: 4 }
// if we save this object, we can do lookups much faster than looping
// through an array
// now to find "md", we simply do:
alert(obj[search]);
如果您需要从同一个源数组进行多次查找,那么将其转换为对象可能是最有效的方法。您需要支付转换的初始代价,但是每次必须搜索数组之后,都会出现O(1)和O(n)。当然,如果你只需要一件东西,那就不用麻烦了。
发布于 2014-10-20 14:50:32
为此,我建议使用对象:
var array = [{'type': 'xs', 'value': 1}, {'type' : 'sm', 'value': '10'}, {'type' : 'md', 'value': '4'}];通过这种方式,您可以将数组搜索为:
function searchMyArrayByType(array, type) {
var items[];
for (var i = 0; i < array.length; i++)
{
if (array[i].type == type) items.push(array[i].value);
}
return items;
}
var valuesWithMd = searchMyArrayByType(array, 'md');有关对象的结构和使用的更多信息,请参见对象
https://stackoverflow.com/questions/26468446
复制相似问题