我有一个这样的数组:
var array = ["xs-1", "sm-10", "md-4"];
现在我想在特定值的末尾得到数字。例如,我想在数组中搜索"md-"
并查看该字符串末尾的数字(应返回4)。
我不能array.indexOf("xs-")
,因为这不是整个价值。有没有办法做到这一点?
答案 0 :(得分:5)
使用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ánosWeisz的建议,您可以使用.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)
。当然,如果你只需要一件物品,那么可能就不用费心了。
答案 1 :(得分:3)
我建议使用对象:
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://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
答案 2 :(得分:2)
您可以创建一个方法,该方法接受您要查找的前缀,数组和拆分字符,并返回数组中的所有数字:
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"]
答案 3 :(得分:1)
更多功能性方法,并假设您可以拥有多个具有相同前缀的元素:
function findPrefix(array, prefix) {
return array.filter(function (a) { return a.indexOf(prefix) === 0; })
.map(function (e) { return e.slice(prefix.length); })
}
答案 4 :(得分:0)
如果您只有一个匹配元素,请执行以下循环:
var array = ["xs-1", "sm-10", "md-4"];
var needle = "md-";
for(i=0;i<array.length;i++) {
if(array[i].indexOf(needle) == 0)
alert(array[i].substr(needle.length, array[i].length));
}
答案 5 :(得分:0)
你可以这样做......
var array = ["xs-1", "sm-10", "md-4"];
getValue("md-");
function getValue(search) {
for(var key in array) {
if(array[key].indexOf(search) > -1) {
alert("Array key is: " + key);
alert("Array value is: " + array[key].replace(search, ""));
}
}
}