javascript - 如何找到数组中第一个重复项的索引?
问题描述
我需要找到数组中第一个重复数字的索引,并将其分配给仅使用 for 循环的空变量
提前致谢
我尝试了许多逻辑运算符。
var findIndex;
var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8]; //-----> it should give result console.log(findIndex) // 0
var arrWithNumbers = [3, 4, 5, 2, 6, 5, 1, 2, 4, 8]; //-----> it should give result console.log(findIndex) // 1
var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8];
var firstIndex = null;
for (var i = 0; i < arrWithNumbers.length; i++) {
if (arrWithNumbers[i] === i) {
firstIndex = arrWithNumbers.indexOf(i);
break;
}
}
console.log(firstIndex);
我的期望:
var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8]; //-----> it should give result console.log(findIndex) // 0
var arrWithNumbers = [3, 4, 5, 2, 6, 5, 1, 2, 4, 8]; //-----> it should give result console.log(findIndex) // 1
//what i have
var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8];
var firstIndex = null;
for (var i = 0; i < arrWithNumbers.length; i++) {
if (arrWithNumbers[i] === i) {
firstIndex = arrWithNumbers.indexOf(i);
break;
}
}
console.log(firstIndex); // 2
解决方案
您拥有的一种选择是拥有一个包含所有数字计数的变量,您可以使用reduce
var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8];
var firstIndex = null;
var numberCount = arrWithNumbers.reduce((c, v) => (c[v] = (c[v] || 0) + 1, c), {});
for (var i = 0; i < arrWithNumbers.length; i++) {
if (numberCount[arrWithNumbers[i]] > 1) {
firstIndex = i;
break;
}
}
console.log(firstIndex);
另一种选择是使用lastIndexOf
. 如果当前索引与该lastIndexOf
值不同,则意味着它有重复并中断循环。
var arrWithNumbers = [3, 2, 4, 5, 2, 6, 5, 1, 2, 4, 8];
var firstIndex = null;
for (var i = 0; i < arrWithNumbers.length; i++) {
if (i !== arrWithNumbers.lastIndexOf(arrWithNumbers[i])) {
firstIndex = i;
break;
}
}
console.log(firstIndex);
推荐阅读
- reactjs - 为什么将 React 应用程序部署到 Heroku 后 Chrome React 开发人员工具仍然是红色的
- json - 合并多个 JSON 数组而不更改 Dataweave 1.0 中的序列
- geometry - 根据 AutoCAD 图表中指定的尺寸缩放长度
- reactjs - 错误:resolve-url-loader:CSS 错误。source-map 信息在 url() 声明中不可用(找到孤立 CR,尝试 removeCR 选项)
- python - 从 TFIDFVectorizer / CountVectorizer 减少词向量的维度
- xpath - 单击添加新按钮并添加该元素时,如何在页面上的黄瓜宁静框架中识别新元素
- javascript - Eclipse 2020-03:多次运行 JavaScript 程序以使其工作
- c# - 从 Azure 表存储中删除许多 PartitionKey 唯一实体
- python - 如果矩形适合水平或垂直python,则递归枚举* m矩形中的所有坐标以检查所有坐标
- .net - MS Graph 客户端库,删除 UploadSession