如何将猫鼬ObjectId数组转换为字符串数组?

时间:2019-06-13 12:56:31

标签: javascript node.js mongodb mongoose

我有一个这样的ObjectId数组:

[ 5cd295fbc53f626fd9d70894,
  5cb0624945111f1c5fdf2527,
  5cc290f5b90fc527c1e46efd,
  5cd6737f294e7b6ec3d9420f,
  5cd295fbc53f626fd9d70894,
  5cb0624945111f1c5fdf2527,
  5cc290f5b90fc527c1e46efd,
  5cd6737f294e7b6ec3d9420f,
  5cd295fbc53f626fd9d70894 ]

我需要将每个Objectid转换为字符串。

我尝试了toString()和JSON.stringify()。但是toString()将每个字符拆分为一个字符串,而JSON.stringify()不会影响数组。

实际上,我正在寻找数组中唯一的ID。我尝试了许多函数来获取唯一元素,但它们似乎仅适用于数字和字符串,而不适用于ObjectId。

找到元素的类型后,它将其显示为对象。

因此,我试图将对象数组转换为字符串数组,以便可以轻松地使用其中一个函数来获取唯一元素。

预期的输出将是这样的:

[ "5cd295fbc53f626fd9d70894",
  "5cb0624945111f1c5fdf2527",
  "5cc290f5b90fc527c1e46efd",
  "5cd6737f294e7b6ec3d9420f",
  "5cd295fbc53f626fd9d70894",
  "5cb0624945111f1c5fdf2527",
  "5cc290f5b90fc527c1e46efd",
  "5cd6737f294e7b6ec3d9420f",
  "5cd295fbc53f626fd9d70894" ]

3 个答案:

答案 0 :(得分:1)

您可以使用map并将String构造函数作为函数传递,该函数会将每个Objectid转换为字符串:

Objectids.map(String) //=> [ "5cd295fbc53f626fd9d70894",
                      //     "5cb0624945111f1c5fdf2527", ...

这不会突变Objectid。它将返回一个新数组。

答案 1 :(得分:1)

您可以使用地图来完成。为数组中的每个元素调用toString,并将它们作为字符串返回到新数组中。

请尝试以下代码:

const stringsArray = objectIds.map(x => x.toString());

在那之后,获得数组中唯一结果的最有效方法是将它们放在Set上。因此它看起来如下所示:

const uniqueStrings = [...new Set(stringsArray)];

希望有帮助!

答案 2 :(得分:0)

将ObjectId转换为字符串不是答案。

但是,如果您只想查找唯一的ObjectId,则可以在JavaScript中使用 set 对象

根据MDN

  

通过Set对象,您可以存储任何类型的唯一值,无论是原始值还是对象引用。

您可以这样做:

const set1 = new Set([your array]);