![](/img/trans.png)
[英]How to deeply map object keys with JavaScript (lodash)?
[英]Lodash map keys and values on an object
我的代碼:
const orig = {" a ":1, " b ":2}
let result = _.mapKeys(_.mapValues(orig, (v) => v + 1), (v, k) => k.trim())
實際和期望的結果 = { "a": 2, "b": 3 }
但是有沒有更好的 Lodashy 方法來做到這一點?
這個解決方案使用_.transform()
,它有點短。 我不確定它是否比您的功能解決方案更好。
const orig = {" a ": 1, " b ": 2 }; const result = _.transform(orig, (r, v, k) => { r[k.trim()] = v + 1; }); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
如果沒有 lodash,我將使用Object.entries()
提取鍵和值, 將它們映射到所需的表單,然后使用Object.fromEntries()
轉換回對象:
const orig = {" a ": 1, " b ": 2 }; const result = Object.fromEntries(Object.entries(orig).map(([k, v]) => [k.trim(), v + 1])); console.log(result);
為了完整起見,這就是沒有 lodash 的方法:
const orig = {" a ":1, " b ":2}; let result = Object.keys(orig).reduce((r, k) => { r[k.trim()] = orig[k] + 1; return r; }, {}) console.log(result);
如果您同意為 IE 使用 polyfill,您也可以這樣做:
const orig = {" a ":1, " b ":2}; let result = Object.entries(orig).reduce((r, [k, v]) => { r[k.trim()] = v + 1; return r; }, {}) console.log(result);
上述方法的主要問題之一是您需要使用 reduce 語句返回結果。 這不是一個大問題,但增加了行數。 另一種方法如下
const orig = {" a ":1, " b ":2}; let result = {}; Object.keys(orig).forEach(k => result[k.trim()] = orig[k] + 1); console.log(result);
或
const orig = {" a ":1, " b ":2}; let result = {}; Object.entries(orig).forEach(([k, v]) => result[k.trim()] = v + 1); console.log(result);
這樣的事情怎么樣?
const orig = {" a ":1, " b ":2}; function test(object) { let out = {}; _.forEach(object, function(value, key) { out[key.trim()] = value + 1; }); return out; } console.log(test(orig));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
使用 reduce 你可以做到:
var obj = {" a ":1, " b ":2} result = _.reduce(obj, (result, v, k) => { result[k.trim()] = v + 1 return result }, {}) console.log(result)
<script src="https://cdn.jsdelivr.net/npm/lodash@latest/lodash.min.js"></script>
reduce 更熟悉,但 IMO 變換在這里似乎更合適
你可以使用一個好的 ol' for in
循環,因為它看起來更干凈
const orig = {" a ":1, " b ":2};
let result = {};
for (const key in orig) {
result[key.trim()] = orig[key] + 1
}
// result {a: 2, b: 3}
你甚至可以把它做成一個襯里.. :)
const orig = { ' a ': 1, ' b ': 2 };
let result = {}; for (const key in orig) result[key.trim()] = orig[key] + 1;
// result {a: 2, b: 3}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.