我有一个具有未知键/值对的对象
myObj = {
key_1: value_1,
key_2: value_2,
key_n: value_n
}
我想将其转换为结构化对象的字典,如下所示:
dictOfStructureObjects =
{
key_1: {
name: value_1,
type: 'foo'},
key_2: {
name: value_2,
type: 'foo'},
key_n: {
name: value_n,
type: 'foo'}
}
我试过这个:
var dic = snapshot.val();
var arr = Object.keys(dic || {});
var names = arr.map(element => {
var rObj = {};
rObj[element.value] = {name: dic[element.value], type: 'foo'};
});
但我认为尝试引用数组元素及其属性value
的值是不正确的......
答案 0 :(得分:2)
正如评论中所指出的,您的预期输出不是有效数组。
如果你想要一个有效的数组,你可以这样做:
function convert(obj) {
return Object.keys(obj).map(key => ({
name: key,
value: obj[key],
type: "foo"
}));
}
const myObj = {
key_1: "value_1",
key_2: "value_2",
key_3: "value_3",
};
console.log(convert(myObj));
如果你想把它作为一个对象,就像那样:
function convert(obj) {
return Object.keys(obj).reduce((result, key) => {
result[key] = {
name: obj[key],
type: "foo"
};
return result;
}, {});
}
const myObj = {
key_1: "value_1",
key_2: "value_2",
key_3: "value_3",
};
console.log(convert(myObj));
答案 1 :(得分:1)
您可以将键映射为具有所需键和新对象的新对象。
var object = { key_1: 'value_1', key_2: 'value_2', key_n: 'value_n' },
newObject = Object.assign(
...Object.keys(object).map(k => ({ [k]: { name: object[k], type: 'foo' } }))
);
console.log(newObject);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:1)
如果你想要一个阵列......
myObj = {
key_1: "value1",
key_2: "value_2",
key_n: "value_n"
}
var a = [];
Object.entries(myObj).forEach(itm=>a.push({key: itm[0], value: itm[1]}));
console.log(a);

如果你想要一个物体
myObj = {
key_1: "value1",
key_2: "value_2",
key_n: "value_n"
}
var a = {};
Object.entries(myObj).forEach(itm=>a[itm[0]] = {key: itm[0], value: itm[1]});
console.log(a);

答案 3 :(得分:0)
标题令人困惑。 op实际上并不希望从类对象转换为字典。他想修改数据结构。
如果您实际上要从类对象转换为字典:
JSON.parse(JSON.stringify(obj))