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

时间:2014-10-20 14:44:38

标签: javascript arrays indexof

我有一个这样的数组:

var array = ["xs-1", "sm-10", "md-4"];

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

我不能array.indexOf("xs-"),因为这不是整个价值。有没有办法做到这一点?

6 个答案:

答案 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"]

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

答案 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));
}

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

答案 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, ""));
        }
    }
}

JSFiddle here.