簡體   English   中英

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 的方法:

解決方案 1:Object.keys & reduce

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

解決方案 2:Object.entries & reduce

如果您同意為 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);

解決方案 3:Object.keys/Object.entries 和 Array.forEach

上述方法的主要問題之一是您需要使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM