我有一个这样的数组:
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);
}
答案 0 :(得分:0)
您可以使用哈希映射来解决这个问题。循环遍历每个内部数组并将元素放入哈希映射中,例如 let hashMap = {0:'abc',10:'ghi'}。
如果key已经存在于hash Map中,检查该值的长度是否小于新值,如果是,则替换。
答案 1 :(得分:0)
将数组缩减为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)