【问题标题】:Find texbox value match in an array在数组中查找文本框值匹配
【发布时间】:2018-05-29 16:35:53
【问题描述】:

我正在尝试查找与数组匹配的 texbox 值,我在下面提供了代码 sn-p:

$('#message').on('keyup', function () {
    suggest_array_sample = [
        { array_val: "#{person1}" },
        { array_val: "#{person2}" },
        { array_val: "#{person3}" }
    ];

    found_variable_array = [];
    $.each(suggest_array_sample, function (key, value) {
        console.log(value);
        if ($.inArray(value, textbox_value)) {
            console.log('found');
            found_variable_array.push(value);
        } else {
            console.log('not found');
        }
    })

    console.log(found_variable_array);
});
<textarea id="message"></textarea>

问题是它总是返回整个数组,而不仅仅是当我在文本框上键入 #{person1} 时输出应该是的匹配项

[{array_val:"#{person1}"}] //预期输出

[{array_val:"#{person1}"},{array_val:"#person2"}]// 在文本框中找到两个或多个匹配项时的预期输出

而不是

[{array_val:"#{person1}"},]{array_val:"#{person2}",{array_val:"#{person3}"}] //当前输出

这是否可以使用inArray() 或者我需要更改代码。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

使用Array的过滤方法。

yourArray.filter ( yourArrayModel => yourArrayModel.fieldValue === yourSearchValue )

在您的情况下,yourSearchValue 可以是“{#person1}”

有关更多信息,请查找过滤器方法文档,我希望这是您想要的。

【讨论】:

  • 为什么要投入,请用一些例子解释问题,或者我可能误解了问题
【解决方案2】:

$.inArray 返回一个位置,如果没有找到返回 -1 否则返回 >= 0

$.inArray() 方法类似于 JavaScript 原生的 .indexOf() 方法,因为它在找不到匹配项时返回 -1。如果 数组中的第一个元素匹配值,$.inArray() 返回 0

试试这个代码

$('#message').on('keyup', function () {
    textbox_value = $(this).val();
    suggest_array_sample = ["#{person1}", "#{person2}", "#{person3}"];

    console.log($.inArray(textbox_value, suggest_array_sample));
});

【讨论】:

    【解决方案3】:

    您要达到的目标并不完全清楚。我用 $.inArray 写了一些东西,告诉你找到的值的数组索引。您需要在数组上使用 .map() 来提取所需的值。

    编辑:

    根据我对您评论的理解,我现在每次找到值时都会将该值添加到 found_value_array 中。

    还是因为同一个值可能出现多次,所以想要返回一个数组?

    let found_variable_array = [];
    
    $('#message').on('keyup',function(){
      suggest_array_sample = [
    	    		{array_val:"#{person1}"},
    	    		{array_val:"#{person2}"},
    	    		{array_val:"#{person3}"}
    	    	]
            
            let index = $.inArray($(this).val(), suggest_array_sample.map(o => o.array_val));
            
            if (index >= 0) found_variable_array.push(suggest_array_sample[index]);
            
            console.log(found_variable_array);
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <textarea id="message"></textarea>

    【讨论】:

    • 例如,我在 texbox 上键入了 #{person1},条件是它应该与值一起返回匹配项,以便我可以将其存储到新数组中
    • 您希望数组在该函数之外持续存在吗?还是每次都是新数组?
    • 它应该只覆盖在 found_variable_array 上设置的当前值,这意味着每次在您在文本框中键入时它与建议数组匹配时,它应该被存储
    • 我进行了编辑,但最后一条评论让我再次感到困惑。如果你只存储一个值,为什么要将它作为一个数组?
    • 它不是一个值哈哈我很抱歉造成混乱我试着更清楚地解释说你在 texbox 上键入 #{person1} 和 #{person2} 因为它匹配它应该被存储的原因我使用数组是因为它可以是多个值,具体取决于Suggest_array的值
    【解决方案4】:

    结合这里提出的想法后,这种方法对我有用

    match_value = suggest_array.filter(function(result){
    	    		
    	    		if(textbox_value){
              		return textbox_value.search(result)>-1
            		}
    
            		else{
              		return false
            		}
    	    	}) 
    	    	
    console.log(match_value);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      相关资源
      最近更新 更多