js如何对比两组数据,并处理相同值一一对应

需要在页面展示两列数据做对比,要相同的值一一对齐,
如何实现这两个数组
let arr= [a,b,h,j];
let arr1 =[j,b,t,a,k];
结果返回如下列
let arr =[a,b,j,h];
let arr1 =[a,b,j,t,k];


let arr = ['a', 'b', 'h', 'j'];
let arr1 = ['j', 'b', 't', 'a', 'k'];

let mergedArr = Array.from(new Set(arr.concat(arr1)));

let resultArr = mergedArr.filter(function(item) {
  return arr.includes(item) && arr1.includes(item);
});

let finalArr = arr.map(function(item, index) {
  let itemIndex = arr.indexOf(resultArr[index]);
  return [item, arr1[itemIndex]];
});

let arr = finalArr.map(function(item) {
  return item[0];
});

let arr1 = finalArr.map(function(item) {
  return item[1];
});

您可以使用以下步骤来对比两组数据并处理相同值一一对应:
1.合并两个数组并去重:使用concat()方法将两个数组合并,并使用Set对象去重,创建一个新的数组。

let mergedArr = Array.from(new Set(arr.concat(arr1)));

2.对新数组进行排序:使用sort()方法按字母顺序对新数组进行排序。

mergedArr.sort();

3.创建新的对比数组:使用map()方法将新数组中的每个元素与原数组进行对比,将相同的元素一一对应。

let comparedArr = mergedArr.map(item => {
  let index1 = arr.indexOf(item);
  let index2 = arr1.indexOf(item);
  return [index1 >= 0 ? index1 : '', index2 >= 0 ? index2 : ''];
});


4.将结果分别存储在两个新数组中:使用map()方法将新数组中每个元素中的第一个和第二个值分别存储在两个新数组中。

let arr = comparedArr.map(item => item[0] !== '' ? arr[item[0]] : '');
let arr1 = comparedArr.map(item => item[1] !== '' ? arr1[item[1]] : '');


完整的代码如下:

let arr = ['a', 'b', 'h', 'j'];
let arr1 = ['j', 'b', 't', 'a', 'k'];

let mergedArr = Array.from(new Set(arr.concat(arr1)));
mergedArr.sort();

let comparedArr = mergedArr.map(item => {
  let index1 = arr.indexOf(item);
  let index2 = arr1.indexOf(item);
  return [index1 >= 0 ? index1 : '', index2 >= 0 ? index2 : ''];
});

let arr2 = comparedArr.map(item => item[0] !== '' ? arr[item[0]] : '');
let arr3 = comparedArr.map(item => item[1] !== '' ? arr1[item[1]] : '');

console.log(arr2);
console.log(arr3);


输出结果为:

["a", "b", "h", "j"]
["a", "b", "j", "t", "k"]


这样,您就可以将两组数据进行对比,并处理相同值一一对应的需求了

首先树立算法思想,达到效果我们需要找到3个数组。
共有数组:arr和arr1数组重合的部分。
arr1独有数组:arr1独有部分。
arr2独有数组:arr2独有部分。
就可以拼成结果数组:
结果数组1:共有数组 + arr1独有数组
结果数组2:共有数组 + arr2独有数组

此时问题转化为找到需要的三个数组:共有数组、arr1独有数组、arr2独有数组。
找到这三个数组的方法有很多,
例如可以使用数组遍历,找到两个数组重合项,由此找到共有数组。
再通过数组遍历,找到共有数组中没有的项,进而组成arr1独有数组、arr2独有数组。

如果您有兴趣,可以将您的代码贴在下面讨论一下。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7640977
  • 这篇博客你也可以参考下:JS零钱兑换 动态规划算法详解
  • 除此之外, 这篇博客: 前端动态规划 js 看这篇就够了中的 案例一:跳台阶 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    剑指 Offer 10- II. 青蛙跳台阶问题

    题目

    一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

    答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

    示例 1:

    输入:n = 2
    输出:2
    

    示例 3:

    输入:n = 0
    输出:1
    

    解题思路:

    题目分析:青蛙每次有两种选择,跳一级或两级,当青蛙跳上第n级的前一步,青蛙有两种状态,即在第n-1级或第n-2级,那么当青蛙跳上第n级的跳法 = 第n-1级跳法 + 第 n-2 级跳法。符合最优子结构性质,使用动规。

    使用刻意练习进行三大步骤思考:

    1、数组元素的含义:dp[i]表示,当青蛙跳上第i级台阶时的跳法数量。我们所求答案为dp[n];

    2、状态转移方程:dp[i] = dp[i-1] + dp[i-2] (i>=2)

    3、初始值:dp[0] =1 dp[1]=1

    代码如下:

    var numWays = function (n) {
      //特判
      if (n <= 1) {
        return 1;
      }
    
      let dp = new Array(n + 1);
      dp[0] = 1;
      dp[1] = 1;
      for (let i = 2; i <= n; i++) {
        dp[i] = (dp[i - 1] + dp[i - 2]) % 1000000007;
      }
      return dp[n];
    }
    
  • 您还可以看一下 吴东坡老师的JavaScript基础讲解课程中的 数字类型、字符串类型、布尔类型小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^