【问题标题】:Are there any higher order function to return an object from an array of objects in javascript?是否有任何更高阶的函数可以从 javascript 中的对象数组中返回一个对象?
【发布时间】:2016-10-20 04:54:46
【问题描述】:

LIVE CODE EXAMPLE:

背景:

试图学习 javascript 的高阶函数、一些 redux 理论并通过数据转换示例应用它,但在过去的几个小时里一直失败。 :(

问题:

如何遍历approved1approved2 并根据2 个案例 返回一个新对象。此外,有没有办法使用像Array.reduce() 这样的高阶函数或在高阶函数中烘焙的组合来做到这一点? 最后,如果最终的 Object 被包裹在一个数组中也没关系。

我想要这个有几个原因:

  • 不变性。
  • 易于测试。
  • 学习目的。

两种情况:

  • 如果 所有 dateApproved 值是 !== null(在本例中:approval1 数组),则返回一个新对象 (或数组包装对象),它看起来喜欢:

    {type: 'APPROVED', approvals: [...approved1]}

  • 如果 任何dateApproved 值等于 null(在此示例中:approval2 数组)返回一个新对象 (或数组包装的对象) 看起来像:

    {type: 'PENDING', approvals: [...approved2]}


JAVASCRIPT:

// With given logic this array evaluate with a type of 'APPROVED'
var approved1 = [

    {
        dateApproved: new Date(),
        id: 1,
    },
    {
        dateApproved: new Date(),
        id: 2,
    }
];

// With given logic this array evaluate with a type of 'PENDING'
var approved2 = [

    {
        dateApproved: null,
        id: 1,
    },
    {
        dateApproved: new Date(),
        id: 2,
    }
];

// This reducer does nothing proper right now just placeholder.
function isApproved(previousValue, currentValue, currentIdx) {
    var TYPE = ['APPROVED', 'PENDING'];
    if(previousValue.dateApproved !== null && currentValue.dateApproved !== null) {

      return currentValue
    }
}

var x = approved1.reduce(isApproved);
console.log(x); // LOG: {type: 'APPROVED' approvals: [...approved1]}

var y = approved2.reduce(isApproved);
console.log(x); // LOG: {type: 'PENDING' approvals: [...approved2]}

【问题讨论】:

    标签: javascript arrays ecmascript-6 higher-order-functions


    【解决方案1】:

    使用Array.prototype.every:

    function wrap(approvals) {
      return {
        type: approvals.every(a => a.dateApproved != null) ? 'APPROVED' : 'PENDING',
        approvals: approvals
      };
    }
    
    wrap(approved1);
    // => Object {type: "APPROVED", approvals: Array[2]}
    
    wrap(approved2);
    // => Object {type: "PENDING", approvals: Array[2]}
    

    【讨论】:

      猜你喜欢
      • 2020-12-05
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 2010-11-10
      • 2020-08-06
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多