对象推送Firebase,如何从推送的项目中删除键名

时间:2017-09-07 22:22:11

标签: javascript firebase

我有这个Object.key代码推送所有项目:

const cloned_items = [];

Object.keys(items).sort().map(key => {
    let item = {
        [`item-${uid}`]: {
            item: false
        }
    }

    cloned_items.push({ ...item });
});

database.ref('/app/items').update({
    ...cloned_items
})

但这会产生以下结果:

"0" : {
    "timeslot-87dah2j" : {
        item: false
    }
},
"1" : {
    "timeslot-7s1ahju" : {
        item: false
    }
}

而不是:

"timeslot-87dah2j" : {
    item: false
},
"timeslot-7s1ahju" : {
    item: false
}

任何想法?

2 个答案:

答案 0 :(得分:1)

您似乎想要创建一个普通对象,而不是数组。

在那种情况下:

const cloned_items = Object.assign(...Object.keys(items).map(uid =>
    ({ [`item-${uid}`]: {item: false} })
));

注意:创建对象时排序是没有用的 - 它的键应该没有特定的顺序。

答案 1 :(得分:0)

您正在创建一个对象数组。好像你想用.reduce()从数组中创建一个对象。

const cloned_items = Object.keys(items).sort().reduce((obj, key) =>
    Object.assign(obj, { [`item-${uid}`]: { item: false } })
, {});

您的代码未显示uid的来源,但我认为您的意思是key,而timeslot代替item

您可能会发现Object.defineProperty更干净,但您需要根据需要设置属性描述符。

const cloned_items = Object.keys(items).sort().reduce((obj, key) => 
    Object.defineProperty(obj, `item-${uid}`, {value:{item: false}})
, {});