Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >数组中可识别对象的JavaScript indexOf()返回-1

数组中可识别对象的JavaScript indexOf()返回-1
EN

Stack Overflow用户
提问于 2016-06-29 19:01:31
回答 3查看 86关注 0票数 0

在为HTML5游戏创建框架时(使用画布),我注意到了一个有趣的关于JavaScript语言的怪癖,我似乎不太理解!

具体来说,我创建了一个对象(节点)数组,在传递函数(作为“节点”)时没有问题,但即使在确认控制台日志中识别了所述对象之后,.indexOf()方法似乎也没有将said对象识别为数组中的一个项(给出了通用的"-1“输出)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function StartGame(){
	//Initiating draw variables
	cx = document.getElementById("GameMap")
	seeds = cx.getContext("2d")
	//Resetting nodes
	nodes = []
	GenNodes() //randomly generates and scatters new connector nodes on the game-map
}

function GenNodes() {
		for (i=0; i<10; i++) {
		nodes[i]= new SeedNode()
		}
}

function SeedNode() {
		this.shape = "circle"
		this.radius = "10"
		this.x = 730*Math.random() + 10
		this.y = 730*Math.random() + 10
		DrawNode(this,this.x,this.y)
} 

function DrawNode(node,x_cen,y_cen) {
	console.log(node)
	console.log(nodes.indexOf(node))
	seeds.beginPath();
	seeds.arc(x_cen,y_cen,10,0,2*Math.PI);
	seeds.stroke();
	seeds.fillText(nodes.indexOf(node),x_cen,y_cen)
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
<title>ScatterDots! the StackOverFlow Edition</title>
<script src="ScatterDots.js"></script>
</head>

<body onload='StartGame()'>
	
<canvas id="GameMap" width="750" height="750" style="border:1px solid #000000"></canvas>

</body>

</html>

我(相当简单)的猜测是,对象在某种程度上不是这个基于数组的方法的有效输入。如果是这样的话,是否有符合W3C标准的方法来解决这个问题呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-29 19:28:44

尝试在将节点添加到nodes之前打印索引。你总能得到-1。简而言之,请将DrawNode移出SeedNode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function GenNodes() {
    for (var i=0; i<10; i++) {
        var node = new SeedNode()
        nodes.push(node)
        DrawNode(node,node.x,node.y)
    }
}

function SeedNode() {
    var node = {}
    node.shape = "circle"
    node.radius = "10"
    node.x = 730*Math.random() + 10
    node.y = 730*Math.random() + 10 
    return node 
} 
票数 3
EN

Stack Overflow用户

发布于 2016-06-29 19:15:09

没有经过测试,但他的问题似乎贯穿了这三个功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function GenNodes() {
        // Rest of code
    nodes[i]= new SeedNode()
}

function SeedNode() {
        //Rest of code
        DrawNode(this,this.x,this.y)
} 

function DrawNode(node,x_cen,y_cen) {

    // Rest of code
    console.log(nodes.indexOf(node))
    seeds.fillText(nodes.indexOf(node),x_cen,y_cen)
}

在函数GenNodes中,您尝试填充nodes数组,但这将取决于SeedNode函数的返回。同样,这个SeenNode依赖于DrawNode函数的返回。这意味着,一旦DrawNode & SeedNode执行完毕,它就会将元素放入nodes数组中。但在放置元素之前,您要检查indexOf中的nodes数组中的元素,该元素位于DrawNode中。

因此,根据indexOf上的文档,它正在返回-1,我认为这是正确的。

票数 2
EN

Stack Overflow用户

发布于 2016-06-29 19:30:16

你的范围有问题。nodes从未声明过DrawNode()可以找到它的任何地方。要修复它,请在任何函数之外声明nodes

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var testMe = [];
function doSomething() {
  doTheThing();
}

function doTheThing() {
  testMe[0] = "hi";
  testMe[1] = "there";
  doTheOtherThing();
}

function doTheOtherThing() {
  console.log("This works");
  console.log(testMe.indexOf("there"));
}

doSomething();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38113276

复制
相关文章
Javascript中的数组对象排序(转载)
js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函数。如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序。如:
李维亮
2021/07/08
8K0
JavaScript——数组对象
注意:当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测 iframes.
岳泽以
2022/10/26
1.5K0
JavaScript Array 对象高阶方法 some、filter、indexOf
JavaScript Array 对象方法太多了,短时间内记不住的,可以每天学几个日积月累,来学习几个常用的方法吧 !
很酷的站长
2022/12/28
7130
JavaScript Array 对象高阶方法 some、filter、indexOf
盘点JavaScript中的Iterable object(可迭代对象)
可迭代(Iterable) 对象是数组的泛化。这个概念是说任何对象都可以被定制为可在 for..of 循环中使用的对象。
前端进阶者
2021/09/10
1.7K0
盘点JavaScript中的Iterable object(可迭代对象)
JavaScript数组对象
万能操作 数组.splice(开始位置,数量,操作),操作后原数组的内容改变第一个参数是指定从几号位置开始删除或添加  第二个参数是指定删除几个元素
十月梦想
2018/08/29
1.7K0
JavaScript|数组对象
讲到数组会有人问,什么是数组?数组就是有序数据的集合,在JavaScript中的数组元素允许属于不同的数据类型,用数组名和下标就可以唯一地确定数组中的元素。接下来将会详细的讲解一下JavaScript数组对象。
算法与编程之美
2020/09/08
1.7K0
【第4期】JS数组中的indexOf方法
这两天在家中帮朋友做项目,项目中使用了数组的indexOf 方法,找到了一篇文章,感觉非常不错,顺便整理下以防链接丢失。
siberiawolf
2020/03/24
2.1K0
MongoDB中如何返回数组对象中第一个对象
在使用MongoDB数据库时,为了减少关联操作,我们通常采用嵌套模型,数组对象是比较常见,例如商品的评论、关注好友等,通常返回前面N条或者第一条之类来减少网络流量(所有历史消息意义可能不大).另外就是单个有16M的限制,此时可能采用连接方式,将部分信息存储在另外一个集合中。最近刚好遇到一个find需求,针对结果集的数组只返回第一条元素。我们知道MongoDB针对数组操作符非常丰富。接下来主要介绍,elemMatch,
徐靖
2022/09/22
12.7K0
JavaScript Array(数组) 对象
然而,如果你想从中找出某一辆车?并且不是3辆,而是300辆呢?这将不是一件容易的事!
陈不成i
2021/07/20
1.1K0
JavaScript对象和数组
在JavaScript中对象是一种数据结构,用于将数据和功能组织在一起,描述一类对象所具有的属性和方法。 对象是某个特定类型的实例。新对象是new操作符后跟一个关键字来实现的。构造函数本身就是一个函数,用于创建新对象。 var person = new Object();这行代码创建了一个Object的实例,并将值保存了变量person中。 创建对象的方式有两种,一种是通过Object函数来创建。 var animal = new Object(); animal.eat=f
水击三千
2018/02/27
1.6K0
JavaScript对象和数组
学习要点: 1.Object类型 2.Array类型 3.对象中的方法 什么是对象,其实就是一种类型,即引用类型。而对象的值就是引用类型的实例。 一.Object类型 到目前为止,我们使用的引用类型最多的可能就是Object类型了。虽然Object的实例不具备多少功能,但对于在应用程序中的存储和传输数据而言,它确实是非常理想的选择。 创建Object类型有两种。一种是使用new运算符,一种是字面量表示法。 1.使用new运算符创建Object var box = new Object();
汤高
2018/01/11
1.8K0
JavaScript 中的可迭代对象与迭代器是啥
Lazy evaluation常被译为“延迟计算”或“惰性计算”,指的是仅仅在真正需要执行的时候才计算表达式的值。
前端小智@大迁世界
2022/06/15
1.7K0
JavaScript 中的可迭代对象与迭代器是啥
比较JavaScript中的数据结构(数组与对象)
大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】。 在编程中,如果你想继续深入,数据结构是我们必须要懂的一块, 学习/理解数据结构的动机可能会有所不同,一方面可能是为了面试,一方面可能
前端小智@大迁世界
2020/10/10
5.5K0
比较JavaScript中的数据结构(数组与对象)
Javascript中的数组
数组的定义: var colors = new Array(20); var colors = new Array('red');  // ['red'] var colors = ['red', 'green']; 判断变量是不是数组: colors instanceof Array;  //true Array.isArray(colors); //true 将数组转化为字符串: colors.toString(); // 'red,green' colors.join(' ')
宅蓝三木
2018/02/07
3.1K0
JS中的indexOf方法
indexOf()是js中内置的方法之一,它的功能大家都很熟悉:简单来说就是得到数据的索引,对于正则不熟练的人,是个很不错的方法。 如果查询到返回索引,反之返回-1(固定用法); 因为indexOf()在不同类型使用的时候可能有细节性的注意点; 这里我们对不同数据类型使用IndexOf的场景进行讨论(其实就是string和array) 注:(暂不讨论两个参数时(第二个参数为查询的起始位置),以及lastIndexOf())
全栈程序员站长
2022/09/18
5.3K0
JavaScript 中的对象
JavaScript 中的对象,Object,可以简单理解成“名称 - 值”对(而不是键值对:现在,ES 2015 的映射表(Map),比对象更接近键值对),不难联想 JavaScript 中的对象与下面这些概念类似:
徐建国
2023/02/23
2.4K0
JavaScript 中的对象
【JavaScript】Array数组对象下的方法
<!--Array数组对象下的方法--> <script> // .isArray(变量);返回的是布尔类型,如果是true则是数组,否则就不是数组 // var arr=[10,20,30,40,50]; // var result=arr.isArray(arr); // console.log(result); //.isArray(变量);判断是不是数组 用 变量 instanceof Array //
游魂
2018/06/08
2.1K0
字符串对象的IndexOf与lastIndexOf
indexOf(str,[index]):返回指定内容在元字符的位置,如果没有返回-1 ,有返回字符串的索引,只返回第一个字符串出现的位置 lastIndexOf与indexOf一样,不过是从字符串后面开始查找 weiz
切图仔
2022/09/08
1.2K0
盘点JavaScript哪些常用的数组对象
上一篇中我们盘点了 js 哪些最常用的内置对象,对Math、random以及Date对象进行了详细的讲解,这三个对象在往后的工作中也是发挥着举足轻重的位置,都是非常常用的对象,可以自己在编辑器中多加练习
玖柒的小窝
2021/12/08
2K0
盘点JavaScript哪些常用的数组对象
JavaScript中的数组创建
数组是一个包含了对象或原始类型的有序集合。很难想象一个不使用数组的程序会是什么样。
疯狂的技术宅
2019/03/27
3.5K0

相似问题

数组indexOf返回-1

14

Javascript indexOf()总是返回-1

21

javascript indexOf总是返回-1

23

javascript indexOf()继续返回-1

33

indexOf继续返回-1 Javascript

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文