首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用部分值从数组中获取全部值

使用部分值从数组中获取全部值
EN

Stack Overflow用户
提问于 2014-10-20 14:44:38
回答 6查看 694关注 0票数 1

我有这样一个数组:

代码语言:javascript
复制
var array = ["xs-1", "sm-10", "md-4"];

现在,我想得到一个特定值末尾的数字。例如,我想在数组中搜索"md-"并查看字符串末尾的数字(应该返回4)。

我不能做array.indexOf("xs-"),因为这不是全部价值。有办法这样做吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-10-20 14:50:01

您可以创建一个使用要查找的前缀、数组和拆分字符的方法,并返回数组中的所有数字:

代码语言:javascript
复制
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;
}

并称之为:

代码语言:javascript
复制
var array = ["xs-1", "sm-10", "md-4"];
var values = findNumberFromPrefix("md-", array, "-");

console.log(values); //["4"]

演示:http://jsfiddle.net/rn4h9msh/

票数 2
EN

Stack Overflow用户

发布于 2014-10-20 14:51:01

使用for循环:

代码语言:javascript
复制
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

代码语言:javascript
复制
    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轻松地将数组转换为对象:

代码语言:javascript
复制
        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)。当然,如果你只需要一件东西,那就不用麻烦了。

票数 5
EN

Stack Overflow用户

发布于 2014-10-20 14:50:32

为此,我建议使用对象:

代码语言:javascript
复制
var array = [{'type': 'xs', 'value': 1}, {'type' : 'sm', 'value': '10'}, {'type' : 'md', 'value': '4'}];

通过这种方式,您可以将数组搜索为:

代码语言:javascript
复制
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');

有关对象的结构和使用的更多信息,请参见对象

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26468446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档