过滤输入字段中的数据。Javascript数组比较?
我有三个输入字段和一个按钮。字段中只能键入数字和逗号。结果必须是在所有三个字段中精确出现两次的数字。比如说过滤输入字段中的数据。Javascript数组比较?,javascript,html,arrays,Javascript,Html,Arrays,我有三个输入字段和一个按钮。字段中只能键入数字和逗号。结果必须是在所有三个字段中精确出现两次的数字。比如说 num_array1 = [1,2,3]; num_array2 = [1,2,3,4]; num_array3 = [1,5,6]; 根据这个例子,结果应该是:2,3 真正的问题是数字“1”,因为所有数组都有它。有了一个简单的嵌入式for循环,我做不到,所以我希望你能:)我期待任何替代方案,解决方案 我的一些代码: 算计 var number1=document.getElem
num_array1 = [1,2,3];
num_array2 = [1,2,3,4];
num_array3 = [1,5,6];
根据这个例子,结果应该是:2,3
真正的问题是数字“1”,因为所有数组都有它。有了一个简单的嵌入式for循环,我做不到,所以我希望你能:)我期待任何替代方案,解决方案
我的一些代码:
算计
var number1=document.getElementById(“number_1”).value.replace(/[^\d,.]/g,”);
var number2=document.getElementById(“number_2”).value.replace(/[^\d,.]/g,”);
var number3=document.getElementById(“number_3”).value.replace(/[^\d,.]/g');
var error=document.getElementById(“error”).innerHTML;
var result=document.getElementById(“结果”).innerHTML;
函数myFunction(){
如果(isNaN(数字1)| | isNaN(数字2)| | isNaN(数字3)){
error=“非法律性质”;
}else{}
}
这是解决方案。首先,必须使用.split()
方法将字符串
转换为数组
var number1 = document.getElementById("number_1").value.replace(/[^\d,.]/g, '').split(',');
//number1=[1,2,3]
然后,您必须使用.concat()
方法对所有3个数组进行concat,并仅查找恰好发生两次的数字
concatArray=number1.concat(number2,number3);
//concatArray=[1,2,3,1,2,3,4,1,5,6];
下一步是使用filter()
函数查找指定元素的发生次数
如果这个数字是2
,并且元素不存在于final数组中,那么我们将把它添加到final
数组中,称为arr
要确定数组中是否存在元素
,我们应该使用indexOf()
方法
concatArray=number1.concat(number2,number3);
//concatArray=[1,2,3,1,2,3,4,1,5,6];
var error=document.getElementById(“error”).innerHTML;
var result=document.getElementById(“结果”).innerHTML;
var-arr=[];
函数myFunction(){
var number1=document.getElementById(“number_1”).value.replace(/[^\d,.]/g',).split(',');
var number2=document.getElementById(“number_2”).value.replace(/[^\d,.]/g',).split(',');
var number3=document.getElementById(“number_3”).value.replace(/[^\d,.]/g',).split(',');
var concatArray=编号1.concat(编号2,编号3);
控制台日志(concatArray);
对于(i=0;i一种使用Javascript的方法。我不包括来自UI的代码,只显示Javascript部分
它按以下步骤工作
使用扩展运算符将数组合并为1个数组
使用GroupBy自定义函数(from)对数字进行分组,以便执行计数操作。这将返回一个Map
对象
过滤在上述步骤中获得的符合条件(计数==2)的映射
var num_array1=[1,2,3];
var num_array2=[1,2,3,4];
var num_array3=[1,5,6];
var resultArray=[];
//使用扩展运算符将阵列合并为单个阵列。
var combinedNumArray=[…num_array1,…num_array2,…num_array3];
//按编号分组
var groupByNumbers=groupBy(combinedNumArray,i=>i);
//计数为2的过滤器
groupByNumbers.forEach(函数(值、键){
如果(value.length==2){
结果:按(键);
}
});
console.log(resultArray);
//使用GroupBy函数
//借来https://stackoverflow.com/questions/14446511/what-is-the-most-efficient-method-to-groupby-on-a-javascript-array-of-objects
函数groupBy(列表,keyGetter){
常量映射=新映射();
list.forEach((项目)=>{
const key=keyGetter(项目);
如果(!map.has(键)){
映射集(键,[项]);
}否则{
地图。获取(关键)。推送(项目);
}
});
返回图;
}