javascript - 用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']];
以上是具有大量数据重复的二维数组,该数组需要通过以下规定进行简化:
- 索引数据 0,必须是完整的(没有变化)
- 索引0之后的数据,如果值与前一个索引相同,则将其更改为''
- 结果数据必须保持二维数组形式
所以结果如下
- 索引数据 0,必须是完整的(没有变化)
- 索引0之后的数据,如果值与前一个索引相同,则将其更改为''
- 结果数据必须保持二维数组形式
所以结果将如下所示:
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'],
...
];
上面的结果可以像开始一样再次解压。
解决方案
它是一个数据结构问题。
你需要2个for
循环。逻辑很简单,将使用 2 个数组,一个 2D 和一个 1D:
- 将 arr1 的第一行分配给 arr2。
- 离开第一行并从 arr1 的第二行开始循环
i=1
。 - 将 arr3 设置为空数组。
- 为内部数组启动另一个循环
j=0
。 - 检查如果
arr1[i][j] === arr[i-1][j]
是然后推''到arr3.push('')
,如果不是然后推arr1[i][j]
到arr3.push(arr1[i][j])
。 - 完成第二个循环。
- 分配
arr3
给arr2.push(arr3)
。 - 完成外循环。
这是工作逻辑
`
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;
`
推荐阅读
- android - Android 4.0.1 - EditText 中的 XML 呈现错误。索引:0,大小:0 - Vew 绘制失败
- bash - 对同一行上的数字进行排序,删除重复项但保持原始
- python - 熊猫数据框中显示不存在的列
- html - Why does setting min-width or min-height to 0 prevent CSS flex and grid overflow?
- r - get browsing state in a function
- r - R函数将代码返回到R Studio中的源代码编辑器?
- node.js - npm 命令期间的 Angular-cli 错误
- flutter - 如何使用 Flutter 创建以下过渡效果?
- css - 嵌入字体的问题
- json - TSC 不断在“outDir”中创建子文件夹