【问题标题】:when I loop the object property I just get first property? how can I solve it?当我循环对象属性时,我只得到第一个属性?我该如何解决?
【发布时间】:2021-05-01 02:20:56
【问题描述】:

我从 multer 那里得到一个对象,它的名称是文件,具有两个属性:艺术品和灵感。我想获取每个属性的原始名称,但是当我运行代码时,我只得到艺术品原始名称? 我该如何解决这个问题?

{
  artworks:
   [ { fieldname: 'artworks',
       originalname: 'Icon_OutdoorLeisure.png',
       encoding: '7bit',
       mimetype: 'image/png',
       buffer:
        <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 64 00 00 00 64 08 06 00 00 00 70 e2 95 54 00 00 00 09 70 48 59 73 00 00 0b 13 00 00 0b 13 01 ... >,
       size: 1598 } ],
  inspiration:
   [ { fieldname: 'inspiration',
       originalname: 'Icon_HealthWellness_Hovered.png',
       encoding: '7bit',
       mimetype: 'image/png',
       buffer:
        <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 64 00 00 00 64 08 06 00 00 00 70 e2 95 54 00 00 00 09 70 48 59 73 00 00 0b 13 00 00 0b 13 01 ... >,
       size: 1986 } ] }

export const Orderfilsename = function (files) {

  let result = JSON.parse(JSON.stringify(files));

  for (var key in result) {
    if (result.hasOwnProperty(key)) {
      let result_2 = result[key].map((res) => {
        const name = res.originalname.split('.')[0];
        const fileExtName = extname(res.originalname);
        const randomName = Array(4)
          .fill(null)
          .map(() => Math.round(Math.random() * 10).toString(10))
          .join('');
        return `${name}${randomName}${fileExtName}`;
      });
      return JSON.stringify(result_2);
    }
  }
};

【问题讨论】:

  • 您希望输出是什么?似乎您假设艺术品和灵感将是长度为 1 的数组,这总是正确的吗?
  • 它们是数组并且有多个值
  • 我想得到每个属性的原始名称。

标签: javascript node.js nestjs multer


【解决方案1】:

这是你需要的吗?

const data = {
  artworks:
  [{
      fieldname: 'artworks',
      originalname: 'Icon_OutdoorLeisure.png',
      encoding: '7bit',
      mimetype: 'image/png',
      size: 1598
    }
  ],
  inspiration:
  [{
      fieldname: 'inspiration',
      originalname: 'Icon_HealthWellness_Hovered.png',
      encoding: '7bit',
      mimetype: 'image/png',
      size: 1986
    }
  ]
};

const Orderfilsename = result => {

  const extractName = x => x.originalname.split('.')[0];
  const randomName = () => Array.from({ length: 4 }, () => Math.round(Math.random() * 10).toString(10)).join('');
  const extractFileExtName = x => x.originalname.split('.')[1];
  const dot = () => '.';

  return Object.values(result)
    .flatMap(x => x)
    .map(x => [extractName, randomName, dot, extractFileExtName].map(fun => fun(x)).join(''))

};

console.log(Orderfilsename(data));

【讨论】:

    【解决方案2】:
          const Orderfilsename = function (files) {
            let names = []
    
            for(let key in files) {
              let groupNames = files[key].map(el => {
                return el.originalname
              })
              names = [...names, ...groupNames]
            }
            return names
          };
    
          console.log(Orderfilsename(data))
    

    【讨论】:

      【解决方案3】:

      你在 for 循环中有一个返回

       for (var key in result) {
          if (result.hasOwnProperty(key)) {
            let result_2 = ...;
            return JSON.stringify(result_2);
          }
       }
      

      所以函数Orderfilsenameresult中的第一个key退出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-23
        • 1970-01-01
        • 2022-10-19
        • 2020-10-07
        • 2021-10-13
        • 1970-01-01
        • 2022-07-20
        • 2011-01-26
        相关资源
        最近更新 更多