我使用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值解析为整数,并将字符串解析为无效。
答案 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,那么你将得到错误。