我有一个数组的数组,像这样:
arr =
[
[0 , abc ],
[7 , def ],
[10, ghi ],
[0 , abcjkl]
]
我想要的是根据第0个位置的值(在我的示例中:[0, abc], [0, abcjkl]
)找到重复项,并在第1个位置删除具有较短字符串的数组。结果应该如下所示:
[
[7 , def ],
[10, ghi ],
[0 , abcjkl]
]
谢谢你的帮助。
编辑:
我有一个工作算法,但似乎不是最好的方法。
function findDupes(arr) {
let dupe = null;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (arr[i] !== arr[j]) {
if (arr[i][1] === arr[j][1]) {
if (arr[i][0].length >= arr[j][0].length) {
dupe = arr[j];
} else {
dupe = arr[i];
}
}
}
}
}
return dupe;
}
let check = findDupes(arr);
while (check) {
filteredValues.splice(arr.indexOf(check), 1);
check = findDupes(arr);
}
将数组缩减为Map,当发现长度较大的重复数组时,删除先前的数组并添加新的数组:
const data = [
[0 , 'abc' ],
[7 , 'def' ],
[10, 'ghi' ],
[0 , 'abcjkl']
]
const result = Array.from(
data.reduce((acc, row) => {
const [key, value] = row
if(value.length > (acc.get(key)?.length ?? 0)) {
acc.delete(key)
acc.set(key, value)
}
return acc
} , new Map())
)
console.log(result)
您可以使用哈希映射来解决这个问题。循环遍历每个内部数组并将元素放入哈希映射中,如let hashMap = {0:'abc',10:'ghi'}。
如果该键在hash Map中已经存在,检查该值的长度是否小于新值,如果小于,则替换