繁体   English   中英

Javascript 使用 Lodash,将数组转换为普通 object,没有键

[英]Javascript using Lodash, convert array to plain object, without keys

 const arr = [{a:'1',b:'b',c:'c'},{a:'9',b:'b',c:'c'},{a:'3',b:'b',c:'c'}] const g = _.toPlainObject(arr) console.log(_.mapValues(g))
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

问题是我如何在结果中每个 object 前面的索引键0,1,2中获得骑乘,并且基于每个 object 的值具有非常简单的对象。 预期结果:

{
  "1": {
    "a": "1",
    "b": "b",
    "c": "c"
  },
  "9": {
    "a": "9",
    "b": "b",
    "c": "c"
  },
  "3": {
    "a": "3",
    "b": "b",
    "c": "c"
  }
}

您可以使用Array.reduce重新映射 object。 不需要图书馆。

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

 const arr = [{a:'1',b:'b',c:'c'},{a:'9',b:'b',c:'c'},{a:'3',b:'b',c:'c'}] const result = arr.reduce( // called for each item in arr. merges the current item and returns the result. (acc, {a, ...other}) => ( // pull the 'a' value, collect remaining properties in 'other' {...acc, // keep prior iterations [a]: { a, ...other } // set the value of 'a' as a key, whose value is this iteration's entry }), {} // start with an empty object ); console.log(result);

这不是一个有效的数据结构,并且违反了 javascript 中的objects规则。 object 或 python 中的字典将始终以键和值对的形式形成,例如{ key: value }

您可以使用Object.values()获取每个键的值。 这将返回一个对象数组,其中包含您可以使用的所有值。 但总的来说,您的数据结构不正确。

使用_.mapKeys()从对象的值中获取键。

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

 const arr = [{a:'1',b:'b',c:'c'},{a:'9',b:'b',c:'c'},{a:'3',b:'b',c:'c'}] const result = _.mapKeys(_.toPlainObject(arr), o => oa) console.log(result)
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM