首页 > 解决方案 > 用javascript压缩二维数组的重复

问题描述

var mycars = [['Ford', 'Fiesta', 'Manual', 'Rp. 160.000.000'],
            ['Ford', 'Fiesta', 'Manual', 'Rp. 163.000.000'],
            ['Ford', 'Fiesta', 'Automatic', 'Rp. 170.000.000'],
            ['Ford', 'Fiesta', 'Automatic', 'Rp. 175.000.000'],
            ['Ford', 'Fiesta', 'Automatic', 'Rp. 173.000.000'],
            ['Ford', 'Focus', 'Manual', 'Rp. 350.000.000'],
            ['Ford', 'Focus', 'Automatic', 'Rp. 400.000.000'],
            ['VW', 'Golf', 'Manual', 'Rp. 360.000.000'],
            ['VW', 'Golf', 'Manual', 'Rp. 365.000.000'],
            ['VW', 'Golf', 'Automatic', 'Rp. 390.000.000']];

以上是具有大量数据重复的二维数组,该数组需要通过以下规定进行简化:

所以结果如下

所以结果将如下所示:

var mycars_compressed = [['Ford', 'Fiesta', 'Manual', 'Rp. 160.000.000'],
            ['', '', '', 'Rp. 163.000.000'],
            ['', '', 'Automatic', 'Rp. 170.000.000'],
            ...
            ['', '', 'Automatic', 'Rp. 400.000.000'],
            ['VW', 'Golf', 'Manual', 'Rp. 360.000.000'],
            ['', '', '', 'Rp. 365.000.000'],
            ...
];

上面的结果可以像开始一样再次解压。

标签: javascriptarraysmultidimensional-array

解决方案


它是一个数据结构问题。

你需要2个for循环。逻辑很简单,将使用 2 个数组,一个 2D 和一个 1D:

  1. 将 arr1 的第一行分配给 arr2。
  2. 离开第一行并从 arr1 的第二行开始循环i=1
  3. 将 arr3 设置为空数组。
  4. 为内部数组启动另一个循环j=0
  5. 检查如果arr1[i][j] === arr[i-1][j] 然后推''到arr3.push(''),如果不是然后推arr1[i][j]arr3.push(arr1[i][j])
  6. 完成第二个循环。
  7. 分配arr3arr2.push(arr3)
  8. 完成外循环。

这是工作逻辑

`

var a1 = [], a2 = [];
let m = mycars.length
    n = mycars[0].length;

a1.push(mycars[0]);

for(let i = 1; i<m; i++) {
   a2 = [];

   for(let j =0; j<n; j++){

       if(mycars[i][j] == mycars[i-1][j]) {
           a2.push('');
       } else {
           a2.push(mycars[i][j]);
       }
   }
   //This is compressed array
   a1.push(a2);
}

var mycars_compressed = a1; 

`


推荐阅读