Javascript过滤掉空值或修复函数的最佳方式



Hello我有一个函数,它获取对象数组,从对象中获取特定值,并创建可以映射到下拉选择器的字符串数组。

const value = {
Value: [{
"Activity Id": "04912309-35",
"Activity Name": "SCAFFOLD SUPPORT TEAM - CARPENTERS & LABORERS",
"Start Date ": "2021-06-29 08:45:21",
"End Date": "2021-06-30 08:45:21",
"Work Group Name": "PSCF",
"Unit ": "01",
Status: "READY",
crew: "FIN",
"Work Pln Factor": "F2 EN RS NR",
},
{
"Activity Id": "RHR*SWPUMPDSCHSTOP*Z",
"Activity Name": "MM 1E12-F332D CLEAN UP AFTER  DISASSEMBLE/INSPECT/REPAIR VALVE",
"Start Date ": "2021-06-29 08:45:21",
"End Date": "2021-07-09 08:45:21",
"Work Group Name": "PME1",
"Unit ": "02",
Status: "WORKING",
crew: "FIN",
"Work Pln Factor": "F1 RM L2 NR",
},
{
"Activity Id": "01322927-01B",
"Activity Name": "2DG024 WALK C/O, DISASSEMBLE VALVE",
"Start Date ": "2021-06-29 08:45:21",
"End Date": "2021-06-29 16:45:21",
"Work Group Name": "ES MM",
"Unit ": "02",
Status: "H/APPR",
crew: "FIN",
"Work Pln Factor": "F2 WE RS NR L1 HS",
},
{
"Activity Id": "01881463-01Z",
"Activity Name": "MM 2CP40MD CLEAN UP AFTER REPLACE FILTER ELEMENT",
"Start Date ": "2021-06-29 08:45:21",
"End Date": "2021-06-29 20:45:21",
"Work Group Name": "PME1",
"Unit ": "01",
Status: "PLAN",
crew: "",
"Work Pln Factor": "F2 EN RS NR",
},
{
"Activity Id": "DG*VLV*BRIDGES*BN",
"Activity Name": "MM 2E22-S001 FILL ENGINE OIL",
"Start Date ": "2021-06-29 08:45:21",
"End Date": "2021-06-29 14:45:21",
"Work Group Name": "MM",
"Unit ": "01",
Status: "",
crew: "",
"Work Pln Factor": "RM",
},
{
"Activity Id": "04912309-3434",
"Activity Name": "MM 2E22-S001 FILL ENGINE OIL zzzz",
"Start Date ": "2021-06-29 08:45:21",
"End Date": "2021-06-29 08:45:21",
"Work Group Name": "PSCF",
"Unit ": "01",
Status: "",
crew: "",
"Work Pln Factor": "F2 WE RS NR L1 H",
},
];
}

const dataFilterArray = (data: any, str: string) => {
const value: any = _.uniqBy(data, str);
let newValue = value.map((each: any) => {
const data = each[str].split(' ');
return _.uniqBy(data, str);
});
newValue.push(`Select All`);
newValue = newValue.flat(1);
return newValue.filter((each: any) => each.length !== 0);
};

console.log(dataFilterArray(value.Value, 'Work Group Name'))
console.log(dataFilterArray(data, 'crew'))
<script src="https://momentjs.com/downloads/moment.js"></script>

我想知道是否有一种方法可以简化dataFilterArray。我觉得它们不应该成为使用平面方法的理由。此函数还处理过滤掉空值。如果可能的话,我也想搬洛达什。

您想要的是一个Set(一个唯一的元素集合(。

const dataFilterArray = (data, str) => {
let s = new Set();
data.forEach(itm => {
(itm[str] || '').split(' ').forEach(v => { 
if(v.length !== 0) s.add(v); 
});
});
return ['Select All'].concat([...s]);
};

好吧,让我看看我是否理解。对于下拉列表,您需要一个键或id一个值。那我们试试这个吧

const result = value.Value.map(res => {
res = {key: res['Work Group Name'], value: res.crew };
return res;
})
console.log(result);

使用此贴图,可以将原始对象转换为关键点、值对象。这是一个如何转换数据的例子,也许不是真正的解决方案,但它可以帮助你。

flatMap将在这里提供帮助,以及用于唯一性的Set to array shuffle的公共数组。.filter (Boolean)删除空字符串以及null和未定义的值。(它也会删除零,所以通常不适合用于数字列表。(

const dataFilterArray = (xs, str) => [
'Select All', 
... [... new Set (xs .flatMap (x => (x [str] || '') .split (' ')))] .filter (Boolean)
]
const value = {Value:[{"Activity Id":"04912309-35","Activity Name":"SCAFFOLD SUPPORT TEAM - CARPENTERS & LABORERS","Start Date ":"2021-06-29 08:45:21","End Date":"2021-06-30 08:45:21","Work Group Name":"PSCF","Unit ":"01",Status:"READY",crew:"FIN","Work Pln Factor":"F2 EN RS NR"},{"Activity Id":"RHR*SWPUMPDSCHSTOP*Z","Activity Name":"MM 1E12-F332D CLEAN UP AFTER  DISASSEMBLE/INSPECT/REPAIR VALVE","Start Date ":"2021-06-29 08:45:21","End Date":"2021-07-09 08:45:21","Work Group Name":"PME1","Unit ":"02",Status:"WORKING",crew:"FIN","Work Pln Factor":"F1 RM L2 NR"},{"Activity Id":"01322927-01B","Activity Name":"2DG024 WALK C/O, DISASSEMBLE VALVE","Start Date ":"2021-06-29 08:45:21","End Date":"2021-06-29 16:45:21","Work Group Name":"ES MM","Unit ":"02",Status:"H/APPR",crew:"FIN","Work Pln Factor":"F2 WE RS NR L1 HS"},{"Activity Id":"01881463-01Z","Activity Name":"MM 2CP40MD CLEAN UP AFTER REPLACE FILTER ELEMENT","Start Date ":"2021-06-29 08:45:21","End Date":"2021-06-29 20:45:21","Work Group Name":"PME1","Unit ":"01",Status:"PLAN",crew:"","Work Pln Factor":"F2 EN RS NR"},{"Activity Id":"DG*VLV*BRIDGES*BN","Activity Name":"MM 2E22-S001 FILL ENGINE OIL","Start Date ":"2021-06-29 08:45:21","End Date":"2021-06-29 14:45:21","Work Group Name":"MM","Unit ":"01",Status:"",crew:"","Work Pln Factor":"RM"},{"Activity Id":"04912309-3434","Activity Name":"MM 2E22-S001 FILL ENGINE OIL zzzz","Start Date ":"2021-06-29 08:45:21","End Date":"2021-06-29 08:45:21","Work Group Name":"PSCF","Unit ":"01",Status:"",crew:"","Work Pln Factor":"F2 WE RS NR L1 H"}]}
console .log (dataFilterArray (value.Value, 'Work Group Name'))
console .log (dataFilterArray (value.Value, 'crew'))

最新更新