Javascript 重新设置对象的格式以使其更浅

Javascript 重新设置对象的格式以使其更浅,javascript,javascript-objects,Javascript,Javascript Objects,在示例对象myObject中,每个对象get都使用编号键存储 > 0: {Foo: {...}} > 1: {Bar: {...}} 要访问该对象中的值,需要添加整数: console.log(myObject[0].Foo) 如何重新格式化对象,以便获得具有键值对的对象,如下所示: console.log(myObject.Foo) 到目前为止,我已经尝试过: const myObject=[ { “Foo”:{ “测试”:“foo的输出” } }, { “酒吧”:{ “测试”

在示例对象myObject中,每个对象get都使用编号键存储

> 0: {Foo: {...}}
> 1: {Bar: {...}}
要访问该对象中的值,需要添加整数:

console.log(myObject[0].Foo)

如何重新格式化对象,以便获得具有键值对的对象,如下所示:

console.log(myObject.Foo)

到目前为止,我已经尝试过:

const myObject=[
{
“Foo”:{
“测试”:“foo的输出”
}
},
{
“酒吧”:{
“测试”:“棒的输出”
}
}
]
log(myObject[0].Foo.test);
//预期结果:
//日志(myObject.Foo.test);
//应该输出:foo的输出
功能扩展(obj、src){
Object.keys(src).forEach(函数(键){obj[key]=src[key];});
返回obj;
}
Object.keys(myObject).forEach(函数(r){
const newKey=Object.keys(myObject[r])[0];
const newValue=myObject[r][newKey];
//console.log('key:',newKey);//输出:Foo
//console.log('value:',newValue);//输出:{“test”:“bar的输出”}
扩展([newKey],{newValue});

}, []);
您的
myObject
是一个数组,因此您不应该将
Object.keys
用于该数组。照办

function extend(obj, src) {
    Object.keys(src).forEach(function(key) { obj[key] = src[key]; });
    return obj;
}

var result = myObject.reduce(extend, {});
或使用ES6:

var results = Object.assign({}, ...myObject);
减少功能

    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));

如果您想要一个键和一个字符串值,您需要对数据结构做一些假设。例如,关键点不能拆分为具有更多关键点的对象,因为在这种情况下,不清楚父关键点应该获得哪个值。可以使用简单的递归函数遍历对象,直到找到基值为止。然后使用顶级键在reduce循环中调用它:

constmyobject=[{“Foo”:{“test”:“Foo的输出”},{“Bar”:{“test”:“Bar的输出”}]
//获取叶节点值:
const getLastVal=(obj)=>(对象的类型!='object'| |对象的类型===null)?obj:getLastVal(Object.values(obj)[0]);
设obj=myObject.reduce((obj,cur)=>{
Object.entries(cur.forEach)([k,v])=>obj[k]=getLastVal(v))
返回obj
}, {})

console.log(obj)
如果你不想让它成为一个数组,为什么不让它成为一个包含一堆嵌套对象的对象呢?myObject是如何构造的,你从哪里得到它?也许您应该简单地修复创建它的代码。这些代码用于来自不同来源的不同实例。我正在寻找一种方法来格式化数据,在我将其与函数一起使用之前,函数需要它。很好的第二个解决方案+1这真的是OP想要的吗?听起来他们想要一个带有
key:stringValue
@MarkMeyer的单杠杆对象,我想是这样的:“期望的结果:
console.log(myObject.Foo.test);
应该输出:
Foo的输出
”。你也可以放弃
测试,让它变得更平淡。@Bergi,我一定是误解了(很明显,因为这被标记为正确的)。我认为
myObject.Foo
应该等于
Foo的输出
主要是我在寻找一种方法,从对象中丢失整数,使其“平坦”。这就解决了问题。