Javascript 使用部分值从数组中获取完整值

Javascript 使用部分值从数组中获取完整值,javascript,arrays,indexof,Javascript,Arrays,Indexof,我有这样一个数组: var array = ["xs-1", "sm-10", "md-4"]; 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)); } 现在我想得到一个特

我有这样一个数组:

var array = ["xs-1", "sm-10", "md-4"];
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));
}
现在我想得到一个特定值末尾的数字。例如,我想在数组中搜索md,并查看字符串末尾的数字应该返回4


我不能执行array.indexOfxs-因为这不是全部值。有没有办法做到这一点?

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

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;
}

演示:

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

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 = [{'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');

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

我建议为此使用对象:

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');

有关对象的结构和使用的更多信息,请参阅如果只有一个匹配元素,请执行如下循环:

var array = ["xs-1", "sm-10", "md-4"];
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));
}

演示:

如果只有一个匹配元素,请执行如下循环:

var array = ["xs-1", "sm-10", "md-4"];
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));
}
演示:

使用for循环:

变量数组=[xs-1,sm-10,md-4]; var搜索=md-; var-found=null; 对于var i=0;i<数组长度;i++{ 如果数组[i].indexOfsearch==0{ 发现=数组[i]; break;//注意:假设只存在一个匹配项,或者至少存在一个匹配项 //只对第一场比赛感兴趣 } } 如果找到{ 发现的警报; }否则{ 未找到警报; } 使用for循环:

变量数组=[xs-1,sm-10,md-4]; var搜索=md-; var-found=null; 对于var i=0;i<数组长度;i++{ 如果数组[i].indexOfsearch==0{ 发现=数组[i]; break;//注意:假设只存在一个匹配项,或者至少存在一个匹配项 //只对第一场比赛感兴趣 } } 如果找到{ 发现的警报; }否则{ 未找到警报;
} 你可以这样做

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

你可以这样做

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, ""));
        }
    }
}
一种更实用的方法,假设您可以有多个具有相同前缀的元素:

function findPrefix(array, prefix) {
  return array.filter(function (a) { return a.indexOf(prefix) === 0; })
    .map(function (e) { return e.slice(prefix.length); })
}
一种更实用的方法,假设您可以有多个具有相同前缀的元素:

function findPrefix(array, prefix) {
  return array.filter(function (a) { return a.indexOf(prefix) === 0; })
    .map(function (e) { return e.slice(prefix.length); })
}

有几种方法可以做到这一点,您可以只使用常规的旧for循环,也可以使用.filter。是否只有一个匹配元素?有几种方法可以做到这一点,您可以使用常规的旧for循环,也可以使用。是否只有一个匹配的元素?不幸的是,数组是动态创建的,因此将其形成这样一个有用的对象将添加更多步骤。@Coop实际上非常简单:array.push{'type':'newtype','value':1}。如果您需要进一步的帮助,例如,从PHP echo创建对象,请毫不犹豫地在此网站上询问,尽管我相信这已经得到了回答。@Coop:您可以使用.reduce将数组映射到一个由前缀索引的对象中。请看我的答案。不幸的是,数组是动态创建的,因此将它形成一个有用的对象,像这样会增加更多的步骤。@Coop实际上非常简单:array.push{'type':'newtype','value':1}。如果您需要进一步的帮助,例如,从PHP echo创建对象,请毫不犹豫地在此网站上询问,尽管我相信这已经得到了回答。@Coop:您可以使用.reduce将数组映射到一个由前缀索引的对象中。看到我的答案了。谢谢,这个函数很好地把它们打包在一起了。不过在这个帖子里还有很多其他的好建议!谢谢,这个函数很好地将它们打包在一起。不过在这个帖子里还有很多其他的好建议!