动态创建属性及其值

时间:2017-08-14 07:52:22

标签: javascript node.js ecmascript-6

我有一个带有属性的对象,该属性具有我想要在具有特定值的同一对象中创建的属性的名称。我可以用旧的方式做到这一点但我认为一个简单的胖箭解决方案应该是可用的。而且我不必使用数组arr对象,而是直接使用设备的大写值。箭头功能再也没有这个引用自己了。如何获得cap值数组中的括号?

let arr = ["onoff", "alarm_motion", "alarm_night"]
let fillcap = arr => {

    let obj = {}

    arr.forEach(a => {
        return obj[a] = false
    })
    return obj
}


let device = {
    caps: arr,
    cap: arr.map(c => ({ [c]: false }))
}


 device = { caps: ['onoff', 'alarm_motion', 'alarm_night'],
 cap:
 [{ onoff: false },
 { alarm_motion: false },
 { alarm_night: false }]
 }
device = {
    caps: arr,
    cap: fillcap(arr)
}

device = {
    caps: ['onoff', 'alarm_motion', 'alarm_night'],
    cap: { onoff: false, alarm_motion: false, alarm_night: false }
}

1 个答案:

答案 0 :(得分:0)

你要做的事情是行不通的,但你可以这样做:

const arr = ['onoff', 'alarm_motion', 'alarm_night'];

const device = {
    caps: arr,
    fillcap() {
        this.cap = this.caps.reduce((cap, c) => Object.assign(cap, { [c]: false }), {});
    },
};

device.fillcap();