如何迭代数组并在之后显示重复元素



我有一个表,其中第一列是元素数组,例如

[apple, banana, cherry, grapes, apple]

对于相邻的列,如果元素被重复,它应该显示重复发生在哪行

水果1apple香蕉3cherry4葡萄葡萄5苹果16苹果/td>//tr>

您可以首先使用filter查找重复项,然后循环查找每次出现的索引。

const arr = ['apple', 'banana', 'cherry', 'grapes', 'apple'];
const duplicates = arr.filter((x, i) => arr.indexOf(x) !== i);
for (const x of duplicates) {
console.log(`Duplicate value ${x} at indexes ${
[...Array(arr.length).keys()].filter(i => arr[i] === x)}`);
}

这里有一个代码,用于遍历表并记录重复的列索引。

var table = document.getElementsByTagName("table")[0];
var fruits = [];
var duplicatelabelcols = [];
//iterate through rows
for (var i = 0; i < table.rows.length; i++) {
var row = table.rows[i];
//iterate through columns
//check if not 1st row
if (i !== 0) {
for (var j = 0; j < row.cells.length; j++) {
var col = row.cells[j];
//if 2nd column
if (j === 1) {
//check if fruit inside fruit array
if(fruits.includes(row.cells[j].innerHTML)) {
duplicatelabelcols.push(fruits.indexOf(row.cells[j].innerHTML));
duplicatelabelcols.push(i-1);
}
//add fruit to fruits array
fruits.push(row.cells[j].innerHTML);
}
}
}  
}
console.log(duplicatelabelcols);
<table>
<tr>
<th>ID</th>
<th>Fruits</th>
<th>dup with</th>
</tr>
<tr>
<td>1</td>
<td>apple</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>banana</td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>cherry</td>
<td></td>
</tr>
<tr>
<td>4</td>
<td>grapes</td>
<td></td>
</tr>
<tr>
<td>5</td>
<td>apple</td>
<td></td>
</tr>
</table>

我创建了这个,它将为您生成每个值的输出及其相应的索引,即使出现多次,也可以轻松显示它们。

我希望你能理解reduce和forEach是如何工作的,这些都是JavaScript中的重要函数,你应该总结一下:(

let arr = ['apple', 'banana', 'cherry', 'grapes', 'apple'];
let arrindexed = arr.reduce((acc, curr, index) => {
let indices = [];
arr.forEach((val, ind) => {
if(ind !== index && val === curr) indices.push(ind + 1);
});
acc.push([curr, indices]);
return acc;
}, [])
console.log(arrindexed)

您可以在一个对象上使用一个带有闭包的单个循环,该对象保持对具有相同项的所有行的引用。

const
items = ['apple', 'banana', 'cherry', 'grapes', 'apple', 'apple'],
table = items.map((hash => (v, index) => {
const temp = { index, row: [index + 1, v] };
(hash[v] ??= []).push(temp);
if (hash[v].length === 2) {
hash[v][0].row[2] = hash[v][1].index + 1;
hash[v][1].row[2] = hash[v][0].index + 1;
}
return temp.row;
})({}))
table.map(row => console.log(JSON.stringify(row)));

最新更新