如何 return JavaScript 中工厂函数的不可变对象

How to return an Immutable object from a factory function in JavaScript

我有一个基本函数接受温度数据作为参数,然后对数据进行简单的温度转换操作 我们如何在不改变对象的情况下执行相同的功能?也就是说,函数不应该改变传入的参数,它应该 return 一个副本

 function temperature(args) {
    convertToF = convertToC = temperatureConverter
    return Object.assign({
        args,
        convertToF,
        convertToC
    }, w.weatherData(args))
}

我有一些帮助函数来帮助转换

 function temperatureConverter(args) {
        const bool = args.unit === 'F'
        return (bool) ? self.Celsiusconverter(args) : self.fahrenheitConverter(args)
    }

    function Celsiusconverter(args) {
        args.value = (args.value - 32) * (5 / 9)
        args.unit = 'C'
        return {
            ...args
        }
    }

     function fahrenheitConverter(args) {
        args.value = (args.value * 9 / 5 + 32)
        args.unit = 'F'
        return {
            ...args
        }
    }

args 对象如下所示:

const objTemp1 = {
    unit: 'C',
    type: 'Temp',
    date: '2010-04-20T00:00:00.000Z',
    place: 'someCity',
    value: 10,
}

函数看起来像这样,问题就解决了

function temperatureConverter(args) {
        const bool = newArgs.unit === 'F'
        return (bool) ? self.Celsiusconverter(args) : self.fahrenheitConverter(args)
    }

    function Celsiusconverter(args) {
        newArgs = {...args}
        newArgs.value = (newArgs.value - 32) * (5 / 9)
        newArgs.unit = 'C'
                return newArgs

    }

     function fahrenheitConverter(args) {
        newArgs = {...args}
        newArgs.value = (newArgs.value * 9 / 5 + 32)
        newArgs.unit = 'F'
                return newArgs

    }