根据字符串的第一个位置的长度删除数组的数组中的重复项.JS



我有一个数组的数组,像这样:

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中已经存在,检查该值的长度是否小于新值,如果小于,则替换

最新更新