所以我有一个包含总统信息的数组,如下所示
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/