Javascript使用Lodash,将数组转换为普通对象,不带键

Javascript使用Lodash,将数组转换为普通对象,不带键,javascript,lodash,Javascript,Lodash,const arr=[{a:'1',b:'b',c:'c'},{a:'9',b:'b',c:'c'},{a:'3',b:'b',c:'c'}] 常数g=uu.toPlainObject(arr) console.log(u.mapValues(g)) 这不是有效的数据结构,违反javascript中对象的规则。python中的对象或字典总是在键和值对中成形,例如{key:value} 您可以使用Object.values()获取每个键的值。这将返回一个包含所有可使用值的对象数组。但是,通常情况下

const arr=[{a:'1',b:'b',c:'c'},{a:'9',b:'b',c:'c'},{a:'3',b:'b',c:'c'}]
常数g=uu.toPlainObject(arr)
console.log(u.mapValues(g))

这不是有效的数据结构,违反javascript中
对象的规则。python中的对象或字典总是在键和值对中成形,例如
{key:value}

您可以使用
Object.values()
获取每个键的值。这将返回一个包含所有可使用值的对象数组。但是,通常情况下,您的数据结构不正确。

使用
\uu.mapKeys()
从对象的值中获取键

注意:由于值是数字(整数字符串),对象属性将按升序显示

const arr=[{a:'1',b:'b',c:'c'},{a:'9',b:'b',c:'c'},{a:'3',b:'b',c:'c'}]
const result=u.mapKeys(u.toPlainObject(arr),o=>o.a)
console.log(结果)
您可以使用重新映射对象。不需要图书馆

我知道如果你不熟悉reduce,这段代码看起来很神秘。我保证不会像看上去那么复杂。仔细阅读reduce的工作原理,你会没事的。(我不确定我在代码中的解释性注释是否有帮助,或者只是让它更难阅读。)

const arr=[{a:'1',b:'b',c:'c'},{a:'9',b:'b',c:'c'},{a:'3',b:'b',c:'c'}]
const result=arr.reduce(
//为arr中的每个项调用。合并当前项并返回结果。
(acc,{a,…other})=>(//拉取'a'值,收集'other'中的剩余属性)
{
…acc,//保留以前的迭代
[a] :{a,…other}//将“a”的值设置为键,其值是此迭代的条目
}),
{}//从空对象开始
);

控制台日志(结果)您的“预期结果”无效。@crashmstr,您是对的,我刚刚意识到我发布了错误的代码片段。我正在修改它。是否保证a)每个对象只有一个键,其值可以解析为一个数字,以及b)这些值不能包含一次以上?是否保证长数组的迭代顺序?因为保证了对象的ES6迭代顺序-标准字符串键的插入顺序,整数键按升序数字顺序排列。在原始数组中,9在3之前,这不是在更改顺序吗?当将键转换为数字时,属性将根据我在前面的注释中编写的规则重新排序。