将条件选项添加到javascript命令

时间:2018-03-05 14:00:31

标签: javascript node.js

我当前的代码正常工作,看起来像

if (Number.isInteger(number)) {
    ffmpeg(video.mp4)

        .on('end', function () {
            console.log('Screenshots taken');
        })

        .screenshots({
            count: number,
            folder: screenshotsOutput,
            size: '1024x700'
        })
} else {
    ffmpeg(video.mp4)

        .on('end', function () {
            console.log('Screenshots taken');
        })

        .screenshots({
            timestamps: number,
            folder: screenshotsOutput,
            size: '1024x700'
        })
}

number可以是数组或整数。如果是数组,则应提供参数计数。如果是数组,则应在参数时间戳中使用。我的代码正在运行,但我想知道是否可以对其进行优化。我尝试了这个,但这不起作用:

ffmpeg(video.mp4)

    .on('end', function () {
        console.log('Screenshots taken');
    })

    .screenshots({
        count: Number.isInteger(number) && number,
        folder: screenshotsOutput,
        size: '1024x700'
        timestamps: Array.isArray(number) && number
    })

是否也可以做这样的事情

除此之外,我想知道是否可以做这样的事情(我知道它不能像我写的那样工作)或者如果我想在命令中添加/删除一个选项,我应该重写整个命令< / p>

ffmpeg(video.mp4)

    .on('end', function () {
        console.log('Screenshots taken');
    })
// Check if sccreenshots are needed
if (withScreenshots) {
.screenshots({
        count: Number.isInteger(number) && number,
        folder: screenshotsOutput,
        size: '1024x700'
timestamps: Array.isArray(number) && number
    })
}

2 个答案:

答案 0 :(得分:0)

在第一个示例中,要缩短代码,可以在键表达式中使用三元/条件运算符:

{
    key: value,
    [expression]: value
}

所以对你而言,它是这样的:

{
    key: value,
    [condition ? "key1" : "key2"]: value
}

至于第二个例子,它也是可能的,但对你来说它没有用,因为你没有在任何事情上调用screenshots方法。

您需要保存ffmpeg的返回值以便稍后使用:

const thing = func(args)
                .on("event", doStuff); // `.on` returns the event listener itself,
                                       // that allows chaining calls to it

if(condition) thing.on("anotherEvent", doSomethingElse);

答案 1 :(得分:0)

这样的事可能对你有好处:

{
  folder: screenshotsOutput,
  size: '1024,700',
  ...(Number.isInteger(number) 
      ? {count: number} 
      : Array.isArray(number) ? {timestamps: number} : {}
     )
}