Lodash映射键和对象上的值

dan*_*y74 10 javascript lodash

我的代码:

const orig = {" a ":1, " b ":2}
let result = _.mapKeys(_.mapValues(orig, (v) => v + 1), (v, k) => k.trim())
Run Code Online (Sandbox Code Playgroud)

实际和期望的结果= {"a":2,"b":3}

但是有更好的Lodashy方式吗?

Ori*_*ori 14

此解决方案使用_.transform(),并且它更短.我不确定它比你的功能解决方案更好.

const orig = {" a ": 1, " b ": 2 };

const result = _.transform(orig, (r, v, k) => {
  r[k.trim()] = v + 1; 
});

console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


Yah*_*din 5

为了完整起见,这就是没有 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);
Run Code Online (Sandbox Code Playgroud)

解决方案 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);
Run Code Online (Sandbox Code Playgroud)

解决方案 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);
Run Code Online (Sandbox Code Playgroud)

或者

const orig = {" a ":1, " b ":2};
let result = {};
Object.entries(orig).forEach(([k, v]) => result[k.trim()] = v + 1);
console.log(result);
Run Code Online (Sandbox Code Playgroud)