我正在创建一个Angular应用程序,需要TypeScript/JavaScript方面的帮助。
我有两个字符串数组
| 阵列1|阵列2|
| - ------|- ------|
| 二○二三年三月三十日|二○二三年三月三十日|
| 二零二三年三月三十一日|二○二三年四月十四日|
| 二○二三年四月十四日|二〇二三年六月三十日|
| 二○二三年四月二十五日|二零二三年七月三十一日|
| 二〇二三年六月三十日||
我尝试比较Array 1和Array 2,并创建两个新的字符串数组Array 3和Array 4。
创建数组3和数组4时:
如果数组1和数组2具有相同的值,则分别插入数组3和数组4。
如果Array 1有“3/31/2023”,并且它不在Array 2中,则在Array 3中插入“3/31/2030”,在Array 4中插入一个空字符串,反之亦然。
最后,数组3和数组4将具有相同的长度,并且它们可以并排显示在表中。
| 阵列3|阵列4|
| - ------|- ------|
| 二○二三年三月三十日|二○二三年三月三十日|
| 二零二三年三月三十一日|““|
| 二○二三年四月十四日|二○二三年四月十四日|
| 二○二三年四月二十五日|““|
| 二〇二三年六月三十日|二〇二三年六月三十日|
| ““|二零二三年七月三十一日|
仅供参考:Array 1和Array 2可以是任意长度,包括一个或两个都为空数组
我喜欢有解决方案使用RxJS,但是,不是必须的。任何帮助将是伟大的这一点。
非常感谢
我的尝试:
我尝试了使用for循环和if语句的解决方案。它在大多数情况下都有效,但不是所有情况下都有效。
此外,我的代码很长,有多个for和if语句。我更喜欢用rxjs寻找代码,不过,JavaScript代码也很棒。
代码:
//比较两个数组...当第一个数组中缺少某个元素时,则插入空白private addBlankToMissingEelement 2(array 1,array 2):数组{
//Deep clone to avoid array mutation
let arrTemp1 = Object.assign([], array1)
let arrTemp2 = Object.assign([], array2)
var arrTemp1Length = arrTemp1.length;
var arrTemp2Length = arrTemp2.length;
let arr1FirstElement = arrTemp1[0];
if (arrTemp1Length === 0 || arrTemp2Length === 0)
return array1;
for (let i = 0; i < arrTemp1Length; i++) {
for (let j = 0; j < arrTemp2Length; j++) {
if (arrTemp1[i] == '' || arrTemp2[j] == '' || arrTemp1[i] == undefined || arrTemp2[j] == undefined) {
break;
}
else if (arrTemp1[i] == arrTemp2[j]) {
break;
}
else if (i == 0 && arr1FirstElement > arrTemp2[j]) { //Add blank to first array at the begining as many times as needed
array1.unshift('');
arrTemp1Length++;
}
else if (arrTemp1[i] != arrTemp2[j] && arrTemp1[i] < arrTemp2[j + 1]) {
console.log("In last --- " + " [" + i + ", " + j + "] --- " + " --- " + arrTemp1[i] + " --- " + arrTemp2[j] + arrTemp2[j + 1]);
array2.splice(j + 1, 0, '');
arrTemp2Length++;
break;
}
}
}
return array1;
}
2条答案
按热度按时间2ic8powd1#
在你的解决方案中,你使用了一个嵌套循环,在这个循环中你遍历第二个数组中的每个元素,但是你需要同时遍历两个数组。
下面是一个非常直接的解决方法,为每个数组保留一个索引,然后检查下一个值是哪个:
下面是第二个版本,它首先构建一个日期列表,然后检查将每个日期放入哪一列。它可以使用任意数量的数组:
一个二个一个一个
fnx2tebb2#
试试这个算法