javascript - 如果对象的属性包含任何子字符串,则从数组中减少对象
问题描述
我试图减少数组中的所有对象,它们的属性“Title”包含单独的 JSON 文件中包含的任何子字符串。我一直在尝试按 objects 属性过滤数组,但它实际上不起作用,reduce() 方法会更好地实现它。
目标是对未排除的对象进行一些数学运算,例如:如果任何对象的属性 Title 与包含的不同(qa、质量保证、软件测试员),那么我们应该删除它并且不要将其计算在内
我正在尝试用 noobie 方法来实现它,但无法让它工作,我认为更好的是通过减少不应该在计算中采用的对象来转换 positionArray,然后进行数学运算。
我的功能
calculateSoftwareExperience: async function () {
fileToCurate.forEach(candidate => {
const positionsArray = candidate.softwareIndustryPositions;
console.log(positionsArray)
//const reducedArray = positionsArray.reduce(x => x.title)
//console.log(positionsArray)
if (Array.isArray(positionsArray) && positionsArray.length) {
// array exists and is not empty
positionsArray.forEach(position => {
let title = position.title;
if (titlesIncluded.some(x => title.includes(x))) {
console.log(title)
const firstFrom = positionsArray[positionsArray.length - 1].from;
const lastTo = positionsArray[0].to;
let diff = lastTo - firstFrom;
let days = (diff * 1000) / (60 * 60 * 24 * 1000) / 1000;
let months = Math.floor(days / 31);
//console.log(firstFrom, "to", lastTo, "diff = ", months);
candidate.softwareIndustryExp = months;
//console.log(months)
}
});
} else {
candidate.softwareIndustryExp = 0;
}
});
},
位置数组输出
[
{
flagged: false,
from: 2019-10-31T23:00:00.000Z,
to: 2020-01-31T23:00:00.000Z,
title: 'junior manual tester'
},
{
flagged: false,
from: 2018-05-31T22:00:00.000Z,
to: 2019-09-30T22:00:00.000Z,
title: 'junior administrator'
},
{
flagged: false,
from: 2016-03-31T22:00:00.000Z,
to: 2016-03-31T22:00:00.000Z,
title: 'praktykant'
}
]
带子字符串的输入
"titlesIncluded": [
"qa",
"quality engineer",
"qa automation",
"software tester",
"qa engineer"
],
解决方案
我找不到使用 reduce() 方法的方法,但我以我的菜鸟方式完成了它。我所做的基本上是创建新对象并按属性标题过滤,然后将每个对象推入数组并进行适当的数学运算。这是代码:
calculateSoftwareExperience: async function () {
fileToCurate.forEach(candidate => {
const positionsArray = candidate.softwareIndustryPositions;
if (Array.isArray(positionsArray) && positionsArray.length) {
let roletypeArray = [];
positionsArray.forEach(position => {
let title = position.title;
if (titlesIncluded.some(x => title.includes(x))) {
let pos = {};
pos.title = title;
pos.from = position.from;
pos.to = position.to;
roletypeArray.push(position);
}
});
if (Array.isArray(roletypeArray) && roletypeArray.length) {
const firstFrom = roletypeArray[roletypeArray.length - 1].from;
const lastTo = roletypeArray[0].to;
let diff = lastTo - firstFrom;
let days = (diff * 1000) / (60 * 60 * 24 * 1000) / 1000;
let months = Math.floor(days / 31);
candidate.softwareIndustryExp = months;
} else {
candidate.softwareIndustryExp = 0;
}
} else {
candidate.softwareIndustryExp = 0;
}
});
},
推荐阅读
- android - 我收到此错误“RecyclerView:未连接适配器;跳过布局”,但我正在使用“布尔 onCreateOptionsMenu(菜单菜单)”
- ios - 将标签添加到原型单元格
- python - 使用 format() 打印三行输出给定的字符串列表
- healthkit - HKWorkoutActivityType 对 HKWorkout 有何贡献?
- numpy - 如何将多个 CSV 数据集以适合 Keras 中的模型?
- java - 方法调用输出什么?
- java - 并行流在不同的操作下可以正常工作吗?
- python - CSV 文件和熊猫
- html - XSS 攻击期间出现不需要的字符
- javascript - 生成 JS 对象字符串但不生成 JSON