过滤输入字段中的数据。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(键)){
    映射集(键,[项]);
    }否则{
    地图。获取(关键)。推送(项目);
    }
    });
    返回图;
    }