从现有数组创建对象列表时遇到问题。
鉴于我有一个空对象:
let data = {}
我想从现有数组中填充
const list = ['somedata1', 'somedata2', 'somedata3']
我想根据提供的数组创建以下对象列表:
data = {
somedata1: undefined,
somedata2: [],
somedata3: 0
}
所以我无法像这样访问或重新分配它们:
// Access
data.somedata1;
// Set new value
data.somedata2 = {subObject: true}
我用Object.assign
,Object.fromEntries
尝试了不同的方法,但是这种方法不能解决问题:
list.forEach(i => {
data[i] = undefined
})
我希望是这样的列表:
data {
somedata1: undefined,
somedata2: undefined,
somedata3: undefined
}
所以我可以这样重新分配他们:
data.somedata1 = 1100
data.somedata2 = ['somevalues']
data.somedata3 = false
====更新====
因此,要使其正常工作,我必须返回一个分配,而不是仅分配该对象。我不明白为什么会这样,如果有人可以解释,那将是完美的。
// WORKING: This function is return an assignment
list.forEach(item => data[item] = undefined)
// WORKING: This arrow function returns an assignment
list.forEach(item => {
return data[item] = undefined
})
// NON-WORKING: This arrow function only assigns without RETURNing the value
list.forEach(item => {
data[item] = undefined
})
答案 0 :(得分:1)
如果要将数组的值转换为另一个对象的键(它们的值是未定义的,则可以用多种方法来实现):
这是两个例子
const list = ['somedata1', 'somedata2', 'somedata3']
// imperative code
const data = {};
list.forEach(elm => {
data[elm] = undefined;
})
// or
// functional code
const newData = list.reduce((acc, cur) => ({...acc, [cur] : undefined}), {})