Как go через объект, чтобы изменить класс - PullRequest
0 голосов
/ 12 апреля 2020

Если задан объект в качестве параметра для изменения созданного ExcelFile (с использованием Class ), как я могу go через этот объект найти, какой параметр необходимо изменить, а затем изменить в ExcelFile?

Например, если я позвоню modify({date: 12/31/2020}), я хочу, чтобы он обновил дату до 31.12.2020, однако, если я дам ей modify({date: '12/31/2020', duration: '60 minutes'}), это обновит и дату, и продолжительность.

Мое мышление было ниже, но это не идентификационная дата ...

class ExcelFile{
    constructor(arr){
        this.date = arr[0];
        this.duration = arr[1];
    }
    modify(obj){
        for (let key in obj) {
            if (obj[key] === "date") {
                 this.date = obj[date];
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Если вам нужно только изменить свойство date вашего экземпляра ExcelFile, вам не нужно итерировать объект, который вы отправляете, в метод modify, но вы можете напрямую получить доступ к свойству date аргумента через деструкция

class ExcelFile{
    constructor(arr){
        this.date = arr[0];
        this.duration = arr[1];
    }
    modify({date, duration}){
        this.date = date || this.date
        this.duration = duration || this.duration
    }
}

const file = new ExcelFile(["01/01/2020", "30 minutes"])
console.log(file)

file.modify({ date:"NEW DATE! 10/10/3000" })
console.log(file)

file.modify({ date:"foo", duration:"bar", unwanted:"baz" })
console.log(file)
0 голосов
/ 12 апреля 2020

Вы на правильном пути, просто измените свойства, используя this[key]:

class ExcelFile{
    constructor(arr){
        this.date = arr[0];
        this.duration = arr[1];
    }
    modify(obj){
        for (let key in obj) {
            this[key] = obj[key]
        }
    }
}

let file = new ExcelFile(["01/01/2020", "30 minutes"])
console.log(file)

file.modify({ date: "02/02/2020" })
console.log(file)

file.modify({ date: '12/31/2020', duration: '60 minutes' })
console.log(file)

// You can also add new properties:
file.modify({ date: '12/01/2005', size: "100 Mb" })
console.log(file)
...