我最近花了一些时间来研究转换器(函数式编程中的工具,可以在不失去代码可读性/灵活性的情况下提高性能),当我开始测试它们的实际速度时,我得到了一些非常令人失望的结果。考虑:
const inc = x => x + 1;
const isEven = x => x % 2 === 0;
// simplest, shortest way I would be comfortable with if performance wasn't an issue
const mapFilter = xs => xs.filter(isEven).map(inc);
// transducers way
// function composition
const compose = (...fns) => x => fns.reduceRight((y, f) => f(y), x);
const map = f => step => (a, c) => step(a, f(c));
const filter = p => step => (a, c) => (p(c) …Run Code Online (Sandbox Code Playgroud)如何在保留键名的同时将对象转换为对象数组?
// actual
obj = {
key1: null,
key2: "Nelly",
key3: [ "suit", "sweat" ]
}
// expected
arr = [
{ key2: "Nelly" },
{ key3: [ "suit", "sweat" ] }
]
Run Code Online (Sandbox Code Playgroud)
目前我的解决方案是......
var arr = Object.keys(obj).map(key => { if (obj[key]) return { key: obj[key] } });
Run Code Online (Sandbox Code Playgroud)
返回
arr = [
undefined,
{ key: "Nelly" },
{ key: [ "suit", "sweat" ] }
]
Run Code Online (Sandbox Code Playgroud) 最近我正在对一个数组进行某种过滤,我想出了两种情况,但我不知道该使用哪一种。
在性能方面,哪个更好用。
arr.filter(someCondition).map(x => x.something)
Run Code Online (Sandbox Code Playgroud)
或者
arr.map(x => {
if(someCondition) {
return x.something
}
})
Run Code Online (Sandbox Code Playgroud)
需要注意的一件事是我正在使用 react,所以undefined在返回数组中有值(不要在里面返回任何东西.map),这是完全可以接受的。
这涉及很多问题,例如,数组中有多少个元素,然后有多少个元素会通过条件,这就是让人想知道哪个更好的原因。
那么,考虑n个元素和所有元素都通过条件并且没有元素通过条件的情况,哪个性能更好?
.filter().map()或 .map与if内部?