将对象转换为对象字典

时间:2018-02-05 15:20:33

标签: javascript node.js dictionary hashmap

我有一个具有未知键/值对的对象

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的值是不正确的......

4 个答案:

答案 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))