return javascript 中的对象数组中的对象是否有任何高阶函数?
Are there any higher order function to return an object from an array of objects in javascript?
LIVE CODE EXAMPLE:
背景:
试图学习 javascript 的高阶函数、一些 redux 理论并通过数据转换示例应用它,但在过去几个小时里一直失败。 :(
问题:
如何基于 2 个案例 迭代 approved1
或 approved2
和 return 新对象。此外,有没有办法用 Array.reduce()
之类的高阶函数或在高阶函数中烘焙的组合来做到这一点? 最后,如果最终对象被包裹在数组中也很好。
我想要这个有几个原因:
- 不变性。
- 易于测试。
- 学习目的。
2例:
如果所有 dateApproved
值是!== null
(在这个例子中:approval1
数组)那么return 一个新对象 (或数组包装对象) 看起来像:
{type: 'APPROVED', approvals: [...approved1]}
如果 dateApproved
值中的 any 等于 null
(在本例中:approval2
数组) return 一个新对象 (或数组包装对象) 看起来像:
{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]}
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]}
LIVE CODE EXAMPLE:
背景:
试图学习 javascript 的高阶函数、一些 redux 理论并通过数据转换示例应用它,但在过去几个小时里一直失败。 :(
问题:
如何基于 2 个案例 迭代 approved1
或 approved2
和 return 新对象。此外,有没有办法用 Array.reduce()
之类的高阶函数或在高阶函数中烘焙的组合来做到这一点? 最后,如果最终对象被包裹在数组中也很好。
我想要这个有几个原因:
- 不变性。
- 易于测试。
- 学习目的。
2例:
如果所有
dateApproved
值是!== null
(在这个例子中:approval1
数组)那么return 一个新对象 (或数组包装对象) 看起来像:{type: 'APPROVED', approvals: [...approved1]}
如果
dateApproved
值中的 any 等于null
(在本例中:approval2
数组) return 一个新对象 (或数组包装对象) 看起来像:{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]}
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]}