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'
排序的数字字符串?