Javascript没有检测到数组中的数字79或16

时间:2018-02-27 17:38:04

标签: javascript html arrays

我使用if(!(results[count].m._id in usedIdArray))来确定数组中是否已存在ID值。此if语句位于for循环中,遍历results中的21个节点。 usedIdArray只是一个整数数组,results[count].m._id是一个数字。 results[count].m通常如下所示:

Node {
  _id: 79,
  labels: [ 'Block' ],
  properties:
   { blockID: '674511',
     upvotes: '4',
     x: '771.2391282095244',
     y: '224.80278118474385',
     type: 'link',
     url: 'https://stackoverflow.com' } }

usedIdArray中还有其他重复的数字,if(!(results[count].m._id in usedIdArray))似乎检测到了这些数字。出于某种原因,只有那些_id的节点是79和16才会导致问题。我知道有3个,1个和其他几个数字的重复。我跑的时候:

console.log(results[count].m._id);
console.log(usedIdArray);

我明白了:

3
[ 1 ]
79
[ 1, 3, 2, 4, 13, 14, 16 ]
16
[ 1, 3, 2, 4, 13, 14, 16, 79, 17 ]
79
[ 1, 3, 2, 4, 13, 14, 16, 79, 17, 16, 18 ]
79    
[ 1, 3, 2, 4, 13, 14, 16, 79, 17, 16, 18, 79, 19 ]
79
[ 1, 3, 2, 4, 13, 14, 16, 79, 17, 16, 18, 79, 19, 79, 20 ]
79
[ 1, 3, 2, 4, 13, 14, 16, 79, 17, 16, 18, 79, 19, 79, 20, 79, 21 ]
[ 1, 3, 2, 4, 13, 14, 16, 79, 17, 16, 18, 79, 19, 79, 20, 79, 21, 79, 22, 23, 24 ]

...最后一行是完整的usedIdArray。我尝试将id值解析为整数,并将字符串解析为无效。

2 个答案:

答案 0 :(得分:2)

问题在于in运算符,如果指定的属性位于指定的对象或其原​​型链中,则返回true。 阅读docs

中的更多内容

您可以使用array.includes函数来测试列表中是否包含元素。

var list = ['one', 'two', 'three', 'fourth'];

console.log('one' in list); // -> false
console.log(list.includes('one')); // -> true

答案 1 :(得分:0)

in在对象中查找属性。如果你有一个数组中的5个元素,它被认为是一个对象为0:element1,1:element2等等,你问在数组中是否0,那么你将得到真。但是如果你在数组中要求element1,那么你将得到错误。