我有以下2D数组
var items = [['al','bv','sd'],
['al','cc','ab'],
['cv','vv','sw'],
['al','bv','sd']
];
Run Code Online (Sandbox Code Playgroud)
我需要一个函数,它将返回一个类似的数组,但具有不同的值.例如,在上面的数组中,['al','bv','sd']发生两次.
我想函数返回我:
var items = [['al','bv','sd'],
['al','cc','ab'],
['cv','vv','sw']
];
Run Code Online (Sandbox Code Playgroud)
假设数据很小,快速而肮脏的解决方案.
在每次迭代中,将行转换为字符串.如果字符串尚未存在于地图中,请使用字典存储值为True的字符串.另外,将它添加到输出数组.如果它已经在字典中,请转到下一个项目.
例:
var d = {};
var out = [];
for( var i = 0; i < items.length; i++ ) {
var item = items[i];
var rep = item.toString();
if (!d[rep]) {
d[rep] = true;
out.push(item);
}
}
// out has the result
Run Code Online (Sandbox Code Playgroud)
您必须循环两次(或三次):
再次循环,从头到尾遍历所有“行”
循环遍历所有“列”:
.splice。代码:
for (var i=0; i<items.length; i++) {
var listI = items[i];
loopJ: for (var j=0; j<items.length; j++) {
var listJ = items[j];
if (listI === listJ) continue; //Ignore itself
for (var k=listJ.length; k>=0; k--) {
if (listJ[k] !== listI[k]) continue loopJ;
}
// At this point, their values are equal.
items.splice(j, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4023 次 |
| 最近记录: |