【问题标题】:JS/Jquery - if input has any name of an array, return associated valueJS/Jquery - 如果输入有任何数组名称,则返回关联值
【发布时间】:2012-08-16 01:10:47
【问题描述】:

这是我昨天问过的question 的延续,我问过如何确定输入是否匹配数组元素的任何部分('sun' & 'sunday' = 'sun')。这是解决方案。

var _array = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];

for (var i = 0; i < _array.length; i++) {
    if (_val.indexOf(_array[i]) != -1) {
        $('span').text('it worked');
        return;
     }
}

$('span').text('nothing');  

然而,我刚刚意识到,如果为真,我需要将它与关联数组中的全名值匹配。例如:如果您输入 ('sun'、'sund'、'sunda' 或 'sunday'),它会返回 'sunday'。理想情况下,它不区分大小写,但我可以自己解决。

var _array = {
    "sun" : "sunday",
    "mon" : "monday",
    "tue" : "tuesday",
    "wed" : "wednesday",
    "thu" : "thursday",
    "fri" : "friday",
    "sat" : "saturday"   
};

这里是解决方案的second part。我意识到我可以在这个例子中删除else { $('p').text(''); },但这在我的项目代码中不起作用。

【问题讨论】:

  • 请将所有代码放入问题中。它使问题独立存在。将来可能不会有外部网站。

标签: javascript jquery foreach associative-array


【解决方案1】:

如果我从您之前的问题中了解到,如果文本输入的任何部分与数组中的某个项目匹配,那么它被认为是匹配的。

现在您似乎想将短数组版本映射到一个完整的单词。

如果这听起来不错,您可以从数组中获取短值,并创建一个短到长版本的映射。

var map = {
   sun: "sunday",
   mon: "monday",
   tue: "tuesday",
   wed: "wednesday",
   thu: "thursday",
   fri: "friday",
   sat: "saturday"
};

然后获取数组值,并将其作为键传递给地图。

var _array = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];

_val = _val.toLowerCase();

for (var i = 0; i < _array.length; i++) {
    if (_val.indexOf(_array[i]) != -1) {
        $('span').text('it worked');
        alert(map[_array[i]]);  
        return;
     }
}

您还说您希望它不区分大小写,所以我将 toLowerCase() 添加到 _val。

【讨论】:

  • 对不起,我在地图中使用了错误的索引。应该是alert(map[_array[i]]);jsfiddle.net/DQPx7/4
  • 看起来不错,但请务必将 map_array 放在 keyup 事件处理程序之外,因为您不需要在每个事件上都使用它们。
【解决方案2】:
function parseDay(val) {
    val = val.toLowerCase();
    var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
    for (var i = 0; i < days.length; i++)
        if (days[i].indexOf(val) == 0)
            return days[i];
}

parseDay('sun'); // 'sunday'

【讨论】:

    【解决方案3】:

    听起来你需要使用.match()

    示例:http://jsfiddle.net/t5pP8/

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 2013-02-10
      • 2023-03-29
      • 2016-10-26
      • 2017-01-24
      • 1970-01-01
      相关资源
      最近更新 更多