非常抱歉,我之前的回答有误。在您的需求中,只需要返回重复的id及其下标,不需要返回不重复的id。以下是修改后的代码:
- function findDuplicateIds() {
- let allIds = Array.from(document.querySelectorAll('[id]')).map(element => element.id); // 获取页面中所有拥有id属性的元素的id,并转换为数组
- let duplicates = {}; // 用对象来存储重复的id及其下标
- for (let i = 0; i < allIds.length; i++) {
- let currentId = allIds[i];
- if (duplicates[currentId] === undefined) {
- duplicates[currentId] = [i]; // 第一次出现的id,直接添加下标
- } else {
- duplicates[currentId].push(i); // 已经存在的id,将下标添加到已存的数组中
- }
- }
- // 将重复的id及其下标转换为二维数组
- let result = Object.entries(duplicates).filter(entry => entry[1].length > 1).map(entry => [entry[0], ...entry[1]]);
- return result;
- }
- let duplicateIds = findDuplicateIds();
- console.log(duplicateIds);
复制代码
在这个修改后的函数中,我们使用了一个对象`duplicates`来存储重复的id及其下标。其中对象的键是id,值是一个数组,用于存储该id出现的下标。在循环遍历所有id的过程中,我们判断当前的id是否已经存在于`duplicates`对象中。如果不存在,我们直接将当前的下标添加到该id的数组中;如果已经存在,我们将当前的下标追加到已存在的数组中。最后,我们通过`filter()`方法过滤掉只有一个下标的id,并将`duplicates`对象转换为二维数组`result`,其中每个子数组都包含了重复id的下标以及对应的id。
希望这次的答案符合您的要求!如果还有任何问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。