Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:比较两个数组并用现有元素填充不匹配的元素_Javascript_Arrays_Loops - Fatal编程技术网

Javascript:比较两个数组并用现有元素填充不匹配的元素

Javascript:比较两个数组并用现有元素填充不匹配的元素,javascript,arrays,loops,Javascript,Arrays,Loops,我有一张单子 var arr1 = ["27", "20", "18", "15", "14", "13", "8", "6", "2", "1"] 我有另一个数组2,它总是显示从1到30 var arr2 = ["1", "2", "3"

我有一张单子

var arr1 = ["27", "20", "18", "15", "14", "13", "8", "6", "2", "1"]
我有另一个数组2,它总是显示从1到30

var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"]
我想比较这两个数组,并在array1中填入“NULL”来表示array1中不存在的其余值

基本上,我的最终数组应该显示为

finalArray = ["1", "2", null, null, null, "6", null, "8", null, null, null, null, "13", "14", "15", null, null, "18", null, null, null, null, null, null, null, null, "27", null, null, null]

已尝试在第二阵列内循环第一阵列。但未能将空值推送到其余元素。如何做到这一点?TIA

您只需在arr2上迭代并检查当前项目是否在arr1内,即可执行以下操作。如果该项在arr1中,则将该项放入新数组,否则将其放入null

var arr1=[“27”、“20”、“18”、“15”、“14”、“13”、“8”、“6”、“2”、“1”]
var arr2=[“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”、“19”、“20”、“21”、“22”、“23”、“24”、“25”、“26”、“27”、“28”、“29”、“30”]
res=arr2.map(item=>arr1.includes(item)?item:null);

控制台日志(res)我会用一种稍微不同的方式来做

首先,使用
arr1
创建
Map
,然后循环主数组,即
arr2
,并检查值是否存在于
Map
中。如果可用,请使用相同的,否则将其填充为null

var arr1=[“27”、“20”、“18”、“15”、“14”、“13”、“8”、“6”、“2”、“1”]
var arr2=[“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”、“19”、“20”、“21”、“22”、“23”、“24”、“25”、“26”、“27”、“28”、“29”、“30”];
//使用'arr1'创建地图,以便在搜索时更轻松
设mappingObj={};
arr1.forEach(val=>{
mappingObj[val]=val;
});
设res=arr2.map(val=>mappingObj[val]| | null)

控制台日志(res)如果
arr2
始终包含从
'1'
'30'
排序的数字字符串,您甚至不需要使用它。你可以这样做:

const arr1=[“27”、“20”、“18”、“15”、“14”、“13”、“8”、“6”、“2”、“1”];
常量finalArray=(新数组(30)).fill(null);
arr1.forEach(项目=>{
finalArray[parseInt(项目)-1]=项目;
});

控制台日志(finalArray)
SO不是免费的代码编写服务。如果您已经尝试自行解决此问题,那么请展示您的方法并解释您在使用此方法时遇到的问题(包括错误和a),您是想更改
arr1
,还是保持
arr1
不变并创建一个全新的数组?我可以问您为什么需要
arr2
,如果它总是包含从
'1'
'30'
排序的数字字符串?