所以我第一次接触 JavaScript 中的对象操作,我有一个问题,想知道是否有人可以回答。
当我想要操作一个对象时,我可以在一些嵌套的 for 循环范围内执行某些操作,但是 JavaScript 中内置了一些函数,例如 map/reduce/filter,以及像 lodash/underscore 这样的库。
我认为后者(map/reduce/filter 和库)是更好的做法,但我只是好奇为什么。
我正在做一些非常基本的对象操作,可以通过一些适当的 for 循环来解决,以获取和更改对象中的正确键/值,但可以使用 JS 中的函数/库轻松完成。只是好奇它们如何更好 - 比如更好的性能/更干净的代码/易于使用/其他什么。
抱歉,没有代码。我非常感谢任何人帮助我在这里了解更多。
编辑 - 因此从 map() 的示例中获取
我可以以 javascript.map 为例
var kvArray = [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}];
var reformattedArray = kvArray.map(function(obj){
var rObj = {};
rObj[obj.key] = obj.value;
return rObj;
});
我可以做类似的事情
var kvArray = [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}];
var reformattedArray = [];
for(var object in kvArray){
//combine both values into object inside of kvArray[object]);
};
代码少了很多 - 但还有其他值得了解的好处吗?
最佳答案
我知道我正在回复一个旧答案,但只是想向 future 的读者指出。
map 归约和过滤函数来自函数式编程世界。
这些是 Lisp、Haskell 等语言中的一流内置运算符(ml?)。 函数式语言倾向于在不可变数据上运行运算符,而不是让代码在数据上运行以对其进行操作(例如循环)。 因此,与提供 for 和 while 循环相比,它们提供了更简单但功能强大的接口(interface),例如 map、filter 和 reduce。
它还可以帮助他们满足其他要求,例如不变性等。这就是为什么 map 会返回一张新 map 而不是改变旧 map 。从并发的 Angular 来看,这些非常好,尽管它们在某些情况下可能会更慢。
这种方法通常会减少多线程或高并发应用程序中的代码错误。 当多个参与者对同一数据进行操作时,不变性有助于防止代码互相干扰。
由于 javascript 试图通过提供函数式编程语言的一些功能来实现部分函数式,因此在其中实现映射、过滤和归约函数也可能是有意义的。
YMMV 取决于您使用提供的工具做什么。
如果您的代码使用 for 循环效果更好,那就使用它。
但是,如果您发现异步代码正在咀嚼公共(public)数据,那么您最终会在尝试调试循环时束手无策。 打个招呼,进行映射、减少和过滤。
关于javascript - 何时/为何在 for 循环上使用 map/reduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127891/