在两次使用map()之后创建一个数组

时间:2019-01-24 09:55:07

标签: javascript node.js

我可能会也可能不会获得2种格式不同的数据。

它们都需要以不同的方式去除字符。请原谅变量名,一旦完成,我会做的更好。

  validates :role_id, uniqueness: { scope: :user_id }

然后我需要将这些数组推送到我的mongo数据库中。

  const cut = flatten.map(obj => {
    return obj.file.replace("0:/", "");
  });

  const removeDots = flatten.map(obj => {
    return obj.file.replace("../../uploads/", "");
  })

我想知道是否有办法加入他们或进行if / else,因为这样做的结果是,如果我有2条记录,它将最终重复,而我得到4条记录而不是2条记录。此外,其中2条记录的格式不正确,即:“ 0:/仍然存在而不是被剥离。

理想情况下,我想检查是否存在let data; for (const loop of cut) { data = { name: loop }; product.images.push(data); } let moreData; for (const looptwo of removeDots) { moreData = {name: looptwo}; product.images.push(moreData); } ,如果存在0:/或两者都存在,则将其都删除。然后从中创建一个数组以进行推送。

3 个答案:

答案 0 :(得分:3)

您可以在同一map上进行2次替换:

const processed = flatten.map(obj => {
    return obj.file.replace("0:/", "").replace("../../uploads/", "");
});

答案 1 :(得分:2)

既然知道了可能的模式,就可以创建一个正则表达式并用它来替换所有出现的情况。

const regex = /(0:\/|(\.\.\/)+uploads\/)/g
const processed = flatten.map(obj => obj.file.replace(regex, ''));

您可以验证here


请注意,正则表达式是一种基于模式的方法。因此有其优点和缺点。

专业版:

  • 您可以具有任意数量的文件夹嵌套。使用字符串../../uploads/仅会限制您使用2个文件夹结构。
  • 您可以在1个操作中实现转换,并且代码看起来很干净。

缺点:

  • 正则表达式可能很难理解,并且可能会稍微降低代码的可读性。 (有意见的
  • 如果您使用.../../uploads/bla之类的模式,它将被解析为.bla

答案 2 :(得分:1)

由于您还询问了连接两个数组的可能方法,因此,我将为您提供几种解决方案(使用和不使用连接)。

您可以在数组的元素上链接.replace,也可以在解决方案中合并两个数组。因此,要么:

const filtered = flatten.map(obj => {
    return obj.file.replace('0:/', '').replace('../../uploads/', '');
});

或(加入数组):

// your two .map calls go here
const joinedArray = cut.concat(removeDots);