【问题标题】:javascript: How to compare two arrays of objects using functional programming?javascript:如何使用函数式编程比较两个对象数组?
【发布时间】:2014-02-02 01:39:11
【问题描述】:

所以最近我在做节点学校挑战, 任务如下:

返回一个接受有效用户列表的函数,并返回一个返回 true 的函数 如果所有提供的用户都存在于原始用户列表中。

解决办法如下:

   module.exports = function (goodUsers) {
   return function (submittedUsers) {
       return submittedUsers.every(function (submittedUser) {
           return goodUsers.some(function (goodUser) {
               return goodUser.id === submittedUser.id;
           });
       });
   };
};

基本上它是一个函数,它接收一个 id 对象并将其与另一个对象进行比较。 如果第二个对象的 id 在第一个对象中,则返回 true。 这是一个例子:http://s8.postimg.org/ql8df5iat/Screen_Shot_2014_02_01_at_5_32_07_PM.png

但是,我已经阅读了 MDN 示例一段时间,但似乎无法理解为什么这个解决方案有效!有人可以一步一步地引导我了解这里实际发生的事情吗?为什么这行得通? every() 和 some() 方法如何处理数组长度的差异?等等

-谢谢

【问题讨论】:

  • 如果每个提交的用户至少有一个具有相同 id 的 goodUser,则该函数返回 true。

标签: javascript arrays object functional-programming compare


【解决方案1】:

实际上everysome 函数并不关心数组长度。

every 将为您的第一个数组的 each 元素执行任意代码。

some 只会在第二个数组中至少有一个具有相同 id 的对象时返回 true。

注意=== 这将在空值或未定义值的情况下“短路”。

希望这会有所帮助。

就我个人而言,我更喜欢双“for”循环语法,因为我认为它更具可读性。

【讨论】:

  • 谢谢你,现在更有意义了!我同意循环,但我正在练习函数式编程:P
猜你喜欢
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多