使用函数式编程过滤文字对象

Filtering literal object using functional programming

本文关键字:过滤 文字 对象 编程 函数      更新时间:2023-09-26

我想知道这个问题是否有一个函数式编程方法。我有一个文字对象和一些键:

var obj= {'a':20, 'b':44, 'c':70};
var keys = ['a','c'];

我想要得到:

{'a':20', 'c':70}

但是没有for循环。我试着:

_.object(keys, ._map(keys, function(key){return obj[key];}))

给出结果,但看起来很复杂…

既然您使用underscore.js,请尝试_.pick()方法,这是专门为此实现的:

var obj = {
  'a': 20,
  'b': 44,
  'c': 70
};
var keys = ['a', 'c'];
console.log( _.pick(obj, keys) );
// Object {a: 20, c: 70}
<script src="http://underscorejs.org/underscore-min.js"></script>

您可以使用.reduce():

var extracted = keys.reduce(function(o, k) {
  o[k] = obj[k];
  return o;
}, {});

.reduce()方法(在其他一些语言中称为"inject"或"fold")遍历数组的值。每个参数都与作为第二个参数传递的初始值一起传递给函数。该函数对每个数组项执行所需的操作,并返回要在下一次迭代时传递的值。

上面的模式非常典型:从一个空对象开始,并在每个函数调用中添加它。