在示例对象myObject中,使用数字键存储每个对象。
> 0: {Foo: {...}}
> 1: {Bar: {...}}
要访问该对象中的值,需要添加整数:
console.log(myObject[0].Foo)
如何重新格式化对象,以便获得具有键值对的对象,如下所示:
console.log(myObject.Foo)
到目前为止,我已经尝试过:
const myObject = [
{
"Foo": {
"test": "output of foo"
}
},
{
"Bar": {
"test": "output of bar"
}
}
]
console.log(myObject[0].Foo.test);
// desired result:
// console.log(myObject.Foo.test);
// should output: output of foo
function extend(obj, src) {
Object.keys(src).forEach(function(key) { obj[key] = src[key]; });
return obj;
}
Object.keys(myObject).forEach(function (r) {
const newKey = Object.keys(myObject[r])[0];
const newValue = myObject[r][newKey];
// console.log('key: ', newKey); // output: Foo
// console.log('value: ', newValue); // output: {"test": "output of bar"}
extend([newKey], {newValue});
}, []);
答案 0 :(得分:1)
您的static
是一个数组,因此不应该将myObject
用于此数组。随便
Object.keys
或使用ES6:
function extend(obj, src) {
Object.keys(src).forEach(function(key) { obj[key] = src[key]; });
return obj;
}
var result = myObject.reduce(extend, {});
答案 1 :(得分:0)
减少功能!
const myObject = [
{
"Foo": {
"test": "output of foo"
}
},
{
"Bar": {
"test": "output of bar"
}
}
]
console.log(myObject[0].Foo.test);
myObject.reduce((acc, curr) => {
return {...acc, ...curr};
}, {})
console.log(JSON.stringify(myObject));
答案 2 :(得分:0)
如果您想要一个具有单个字符串值的键,则需要对数据结构进行一些假设。例如,不能将键拆分为具有更多键的对象,因为在这种情况下,尚不清楚父键应获取哪个值。您可以遍历对象,直到使用简单的递归函数找到基值。然后使用顶级键在reduce循环中调用它:
const myObject = [{"Foo": {"test": "output of foo"}},{"Bar": {"test": "output of bar"}}]
// Get the leaf node value:
const getLastVal = (obj) => (typeof obj !== 'object' || typeof obj === null) ? obj : getLastVal(Object.values(obj)[0]);
let obj = myObject.reduce((obj, cur) => {
Object.entries(cur).forEach(( [k, v]) => obj[k] = getLastVal(v))
return obj
}, {})
console.log(obj)