将两个文本输入与逗号分隔值进行比较,如果一个输入仅包含另一输入中的值,则返回 true

当您有两个输入都有逗号分隔值时。我怎样才能比较这些,以便我可以得到if match然后做这个else做那个。


<input type='text' class='focusfield' value=''>


<input type='text' class='fixed' value='4002,4003,4004,4005,4006,4007'>



// Example 1 for generated input (should return FALSE)

<input type='text' class='generated' value='3500,3700,4002,4006,4007,4005,4004,4003'>


// Example 2 for generated input (should return FALSE)

<input type='text' class='generated' value='3500'>


// Example 3 for generated input (should return TRUE)

<input type='text' class='generated' value='4002,4006,4007,4005,4004,4003'>


// Example 4 for generated input (should return TRUE)

<input type='text' class='generated' value='4002'>

请注意,generated输入的顺序与字段的顺序不同fixed。


当输入中的所有数字generated也出现在输入中fixed时,它应该返回 true,否则它应该返回 false。该代码必须在离开focusfield.


在文档就绪函数中,我有以下内容(这是我尝试的所有内容中唯一有效的部分,请参阅以下链接):


$('.focusfield').focusout(function(){


});

我尝试将以下答案写入我的代码中,但没有一个提供结果,通常我可以通过现有的 SO 问题得到接近我想要的结果,但这次我没有。所以我没有可以开始的部分工作代码。

如何在 javascript 或 jquery 中将值与逗号分隔值进行比较

如何在jquery中用逗号比较两种货币

jquery 比较两个字段值

使用 Jquery 比较两个输入值

将两个字符串与逗号分隔值进行比较(适用于 c+,但我可以从中得到一个想法,但遗憾的是我没有。)

使用JS比较多个逗号分隔值

我的历史记录中有更多链接,但我不认为这会增加问题,我只是想发布这些链接,以便每个人都知道我不仅仅是在这里索要免费代码;-0。

感谢所有提供帮助并花时间阅读所有内容的人。


肥皂起泡泡
浏览 75回答 2
2回答

梦里花落0921

所以让我们用最少的代码工作:const goal = '4002,4003,4004,4005,4006,4007';const test ='3500,3700,4002,4006,4007,4005,4004,4003';如果每个测试数字都包含在目标内,您需要一个返回 true 的方法。function inside(a, b) {  //array of numbers  const aV = a.split(',').map( e => +e);  const bV = b.split(',').map( e => +e);  //every b must be in a  return bV.every( v => aV.indexOf(v) !== -1 );}const goal = '1,2,3';const test ='1,2';function inside(b, a) {  //array of numbers  const aV = a.split(',').map( e => +e);  const bV = b.split(',').map( e => +e);  //every b must be in a  return bV.every( v => aV.indexOf(v) !== -1 );}console.log('Is', test);console.log('inside', goal);console.log('=>', inside(test, goal) );编辑这是一个逐步解决方案您需要一个接受两个字符串并返回一个布尔值的函数。function inside(a,b) {    return true;}使用“数组作为逗号分隔的字符串”是痛苦的......让我们将字符串转换为数组,用“,”分割function inside(b, a) {  //array of numbers  const aV = a.split(',');  const bV = b.split(',');  return true}然后我从字符串数组更改为数字数组,.map( e => +e)这完全没用哈哈...抱歉...所以让我们忘记这一点好的,我们要确保 Bv 中的每个值都在 aV 中。因此,对于 Bv 中的给定值(如 x),我们想要测试 x 是否在 aV 中。让我们检查 aV 中 x 的索引:aV.indexOf(x) 如果是-1,则意味着not present......太棒了,让我们为每一个bV !function inside(b, a) {  //array of numbers  const aV = a.split(',');  const bV = b.split(',');  for( let i = 0; i < bV.length; i++) {    const x = bV[i];    const index = aV.indexOf(x);    if ( index === -1 ) {        //Not present, we stop here        return false;    }  }  //So we check for every Bv and none were absent, let's return true  return true;}好的,它可以工作,但是......我不喜欢使用for数组,让我们这样做forEachfunction inside(b, a) {  //array of numbers  const aV = a.split(',');  const bV = b.split(',');  //Let's define everything is ok  let result = true;  bV.forEach( x => {    if ( aV.indexOf(x) === -1 )        result = false;  })  return result;}很好,但这正是该方法的重点every!function inside(b, a) {  //array of numbers  const aV = a.split(',');  const bV = b.split(',');  return bV.every( x => {    if ( aV.indexOf(x) === -1 )        result = false;    return true;  })}让我们简短地说function inside(b, a) {  //array of numbers  const aV = a.split(',').map( e => +e);  const bV = b.split(',').map( e => +e);  //every b must be in a  return bV.every( v => aV.indexOf(v) !== -1 );}

互换的青春

您可以使用一些内置的 javascript 函数来完成此操作。首先拆分值,将它们存储在数组中并对值进行排序。您可以比较该数组的元素是否等于源数组。我做了一个jsfiddle来解释它。&nbsp;https://jsfiddle.net/3cLa5614/function checkValues(input) {&nbsp; &nbsp; const sources = document.getElementById('source').value.split(',').sort();&nbsp; &nbsp; const values = input.value.split(',').sort();&nbsp; &nbsp; let comparator = sources.splice(0,values.length);&nbsp; &nbsp; return JSON.stringify(comparator)==JSON.stringify(values)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript