当您有两个输入都有逗号分隔的值时。我如何比较这些,这样我就可以得到一个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.
感谢所有提供帮助并花时间阅读这一切的人。
所以让我们使用最小代码:
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:aV.indexOf(x)
中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
与Array一起使用,让我们使用forEach
吧
function 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 );
}
参见的Array.every、String.split、Array.index
您可以使用两个内置的javascript函数来实现这一点。
首先对值进行拆分,将它们存储在数组中,然后对值进行排序。您可以比较此数组的元素是否等于源数组。
我做了一个小提琴来解释它。https://jsfiddle.net/3cLa5614/
function checkValues(input) {
const sources = document.getElementById('source').value.split(',').sort();
const values = input.value.split(',').sort();
let comparator = sources.splice(0,values.length);
return JSON.stringify(comparator)==JSON.stringify(values)
}