我正在使用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值解析为整数和字符串,无济于事。

最佳答案

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

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





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

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

07-26 00:16