javascript - 映射数组时如何计算两年之间的差异

标签 javascript arrays function mapping

所以我有一个包含总统信息的数组,如下所示

         var presidentsLookLikeThis = [{
            "id": 1,
            "president": 1,
            "nm": "George Washington",
            "pp": "None, Federalist",
            "tm": "1789-1797"
        }];

我正在尝试让它看起来像下面的

        var target = [{
            "id": 1,
            "number": 1,
            "firstName": "",
            "lastName": "", // You can include Middle Initials here
            "party": "...",
            "yearsInOffice": 4
        }];

所以我已经在下面列出了它,但我似乎无法弄清楚如何在下面显示他们的总统任期的实际长度。我现在在“yearsInOffice”下设置它的方式我得到了未定义。我会为此编写另一个单独的函数,然后以这种方式解决它吗?

        var newPresidents = presidents.map(mapPresidents);

        function mapPresidents(oldPresidentsArray) {

            let namesInArray = oldPresidentsArray.nm;
            const nameParts = namesInArray.split(/ (.+)/); // incase of president having middle initial

        var newPresidentsArray = {
                id: oldPresidentsArray.id,
                number: oldPresidentsArray.president,
                firstName: nameParts[0],
                lastName: nameParts[1],   
                party: oldPresidentsArray.pp,
                yearsInOffice: oldPresidentsArray.time
            };

            return newPresidentsArray;


        };

提前感谢您的帮助!

最佳答案

回答

让我们从令人困惑的参数名称开始。 oldPresidentsArray 实际上是一个对象,而不是数组。

你的问题的答案是,在这个对象上没有像时间这样的属性。只有 tm 并且它返回一个具有年份范围的字符串。

您缺少 mapPresidents() 函数中计数时间的实现。

示例解决方案

var presidents = [{
            "id": 1,
            "president": 1,
            "nm": "George Washington",
            "pp": "None, Federalist",
            "tm": "1789-1797"
        }];
 
var newPresidents = presidents.map(mapPresidents);
console.log(newPresidents)

 
 function mapPresidents(oldPresident) {

            let namesInArray = oldPresident.nm;
            const nameParts = namesInArray.split(/ (.+)/); // incase of president having middle initial
            const yearsInOfficeArr = oldPresident.tm.split('-').map(year => +year) //Separate years and parse it into numbers
            const yearsInOffice = yearsInOfficeArr[1] - yearsInOfficeArr[0] || yearsInOfficeArr[0]
        var newPresident = {
                id: oldPresident.id,
                number: oldPresident.president,
                firstName: nameParts[0],
                lastName: nameParts[1],   
                party: oldPresident.pp,
                yearsInOffice: yearsInOffice
            };

            return newPresident;

        };

关于javascript - 映射数组时如何计算两年之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60200965/

相关文章:

javascript - 使用 sidebar.js/jQuery 将不透明层添加到 HTML 部分

c - 返回值显示到屏幕时的函数错误

python将不同的**kwargs传递给多个函数

javascript - 过滤对象数组返回空数组

ruby - 使用 ruby​​ on rails 在服务器中调用数据库函数

C++:指向具有可变数量参数的函数的函数指针

javascript - 为oauth创建一个弹出窗口

javascript - 如何测试使用 module().controller 创建的 angularjs Controller ?

javascript - 使用 jquery 替换复选框列表中的标签

arrays - 快速比较两个数组的内容