我有一个这样的数组:
var array = ["xs-1", "sm-10", "md-4"];
现在我想获取特定值末尾的数字。例如,我想在数组中搜索 "md-"
并查看该字符串末尾的数字(应返回 4)。
我不能执行 array.indexOf("xs-")
因为那不是全部值。有办法做到这一点吗?
最佳答案
使用 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 Weisz 的建议构建,您可以使用 .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)
。当然,如果您只需要一件元素,那么可能就不用费心了。
关于javascript - 使用部分值从数组中获取全部值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26468446/