这两天在写项目的时候,我用数组存储对象元素,但是用indexOf方法寻找数组中对象的下标时出现了问题。indexOf方法一直返回-1,即没有找到对象。但我很确定数组中有该对象元素,那究竟是怎么回事呢?

我看了一下indexOf的定义和用法:

indexOf() 方法可返回数组中某个指定的元素位置。

该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。

如果在数组中没找到指定元素则返回 -1。

诶!?好像没问题?

但是代码是不会骗人的!于是我就单独写了一个test进行测试。

代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<button type="button" onclick="test()">test</button>
</body>
<script>
function test(){let ob1 = {OP:"w",type:"t1"};let ob2 =  {OP:"w",type:"t1"};let view = [];view.push(ob1);console.log(view.indexOf(ob1));console.log(view.indexOf({OP: 'w', type: 't1'}));console.log(view.indexOf(ob2));console.log(view);console.log(typeof view[0]);console.log(typeof ob1);console.log(typeof {OP:"w",type:"t1"});console.log({OP:"w",type:"t1"} === ob1);console.log(ob2 === ob1);
}
</script>
</html>

结果如下:

可以看到,ob1,ob2虽然在对象的定义上完全一样,但是它们不等价,即不相等。那就可以明白为什么indexOf方法无法找到对象元素的问题了。到这里我才知道原来对象不能直接比较,而是要比对所有的键值(唉,当初学的时候也没有注意这个问题QAQ)。

结论:indexOf方法不能用于寻找对象元素,因为对象元素不能直接比较。如果想要知道对象元素在数组中的下标,就单独设一个函数,循环比较对象与数组元素的所有键值。

JavaScript在数组中寻找相同对象元素的问题相关推荐

  1. 从字符串数组中寻找数字的元素

    前几天Insus.NET有写过一篇<从字符串数组中把数字的元素找出来>http://www.cnblogs.com/insus/p/8001026.html 和它的延伸篇<C# yi ...

  2. JavaScript 删除数组中为null的元素,过滤数组

    在对下拉框的的列表进行赋值,是根据接口返回的数组赋值,例如: let arr = [null,'晴','阴转小雨','小雪','大雪','阵雨']; 1.使用filter过滤数组中null,undef ...

  3. 【微信小程序】JavaScript 从数组中删除指定值元素的方法封装

    效果 const somearray = ["mon", "tue", "wed", "thur"] removeByV ...

  4. 用 JavaScript 替换数组中的对象

    由于 JavaScript 是一种动态语言,本文将讨论如何在 JavaScript 中轻松替换存储在数组中的不同对象. 在 JavaScript 中,数组中的对象和类型是动态的或可以更改的.我们可以在 ...

  5. 判断数组中是否包含某个元素,判断对象中是否包含某个属性,判断字符串中是否包含某个字符串片段

    1-判断对象中是否包含某个元素 方法一: 使用in var str = {name:"mayouchen",name:"js", age:100 }alert( ...

  6. 未能比较数组中的两个元素_算法3 寻找两个正序数组的中序数

    问题描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的中位数.要求设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题. ...

  7. JavaScript - 移除数组中的空字符串元素

    移除数组中的空字符串元素 使用 filter 方法对数组进行拷贝,删除空字符串元素,保留其他元素(第 22 ~ 24 行): <!DOCTYPE html> <html>< ...

  8. JavaScript 删除数组中指定元素(5种方法)

    JavaScript 删除数组中指定元素 在 JavaScript 中,数组是一种常见的数据类型,可以存储多个元素.有时候,我们需要从数组中删除某些特定的元素.本文将介绍如何使用 JavaScript ...

  9. python:无序数组中寻找第K大的元素

    题目: 所谓"第(前)k大数问题"指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题. 解法1:堆排序 采用元素下沉法,维护一个k大小的最小堆, ...

最新文章

  1. (转)教你实现Winform窗体的四边阴影效果
  2. oracle em 按钮乱码解决办法
  3. (四)开源C# WPF控件库《AduSkin – UI》
  4. 【Python】import自己的模块报错
  5. 【matlab】找出数组中符合条件的数并赋值
  6. XSS-Game level 13
  7. 配置HistoryServer
  8. 小猿圈分享Javascript技巧(下)
  9. 使用讯飞语音识别的空指针错误
  10. 羽毛球社团php,羽毛球兴趣小组计划
  11. webservice 405 java_用浏览器测试Get与Post Webservice,Post一直报405错误,而Get能够成功的原因与解决方法...
  12. VRChat简易教程4-使用VRC的接口实现物体的移动(VRC的action和trigger接口)
  13. 计算机英语教学设计反思,小学五年级英语教学设计与反思
  14. Wind River Linux
  15. Tableau自定义分类调色板
  16. SDUT 2879 Colorful Cupcakes (2014年山东省第五届ACM大学生程序设计竞赛)
  17. 9.leetcode题目189: Rotate Array
  18. c语言二重指针做参数,C语言二重指针的运用
  19. 小米妙享偷渡用户升级方法(3.0.2.68)
  20. 饥荒机器人雷击_饥荒17版本最强人物 机器人解读

热门文章

  1. 路学长葬礼八宝山举行 王小帅娄烨等送别
  2. 软件开发新人如何高效解决BUG
  3. ARMv8 Cortex-a 编程向导手册学习_6.aarch64 应用移植注意事项与 AArch64 ABI
  4. 阿了嗝欢的小白日记——No session异常的发生原因和解决方案
  5. iptables深入解析-mangle篇
  6. python台风动图绘制_让数据动起来——三维动图剖析“海神”
  7. 如何查看exe运行文件是32位还是64位
  8. iOS-卡片/卡牌堆叠式布局,无限滑动实现方案(一)
  9. 线性表的顺序存储结构(C语言讲解)
  10. Kubernetes:(七)k8s优化大法(江湖失传已久的武林秘籍)