2017-09-16 93 views
0

我有这个if if else表达式筛选元素dogs[] courses[] departments[]第一个代码段绝对按我想要的方式工作,但我的问题是它不可重用,方式是es5-ish。Javascript三元运算符链接错误

1段

if (item == 'dogs') { 
     item = 'dogs'; 
     return this[`${item}`].filter(item => new RegExp(`^${data}`, 'gi').test(item)); 
    } else if (item == 'courses') { 
     item = 'courses'; 
     return this[`${item}`].filter(item => new RegExp(`^${data}`, 'gi').test(item)); 
    } else if (item == 'departments') { 
     item = 'departments'; 
     this.dept = this.deptControl.value; 
     return this[`${item}`].filter(item => new RegExp(`^${data}`, 'gi').test(item.name)); 
    } 

在这个片段中我尽了最大努力缩短ES5十岁上下的代码,但deptartments[]不工作,顺便我想

第2段

item = 
     item == 'dogs' ? 'dogs' 
     : item == 'courses' ? 'courses' 
     : item == 'departments' ? 'departments' : ''; 

    return this[`${item}`].filter(item => new RegExp(`^${data}`, 'gi').test(item == 'departments' ? item.name : item)); 

和这个片段中的department[]是同样不工作的方式我想

3段

item = 
    item == 'dogs' ? 'dogs' 
     : item == 'courses' ? 'courses' 
     : item == 'departments' ? 'departments' : ''; 

    // let patch = item == 'departments' ? item.name : item; 
    let patch = item == 'departments' ? item['name'] : item; 

    return this[`${item}`].filter(item => new RegExp(`^${data}`, 'gi').test(patch)); 

请帮我如何解决在departments[]块我的问题,使用三元运算符,而不是老式的if..else

+1

排列不会咬人。 –

+2

或者只是'item = item || “”' – adeneo

+1

你只在第一个块中设置this.dept。 – trincot

回答

1

在过滤器只需使用一个不同的变量名称,如x

return {dogs:1,courses:1,departments:1}[item] ? this[item].filter(x => 
     new RegExp(`^${data}`, 'gi').test(item == 'departments' ? x.name : x)) 
    : undefined; 
+0

非常感谢你这么多@tricot – Vadamadafaka

0

鉴于你正在设置一个值,如果它是部门,我想也许switch声明会在这里很好。这样的事情呢?

const testItem = (items, data) => { 
    return items.filter(item => new RegExp(`^${data}`, 'gi').test(item)) 
} 

switch (item) { 
    case 'dogs': 
    case 'courses': 
    return testItem(this[item], data) 
    case 'departments': 
    this.dept = this.deptControl.value 
    return testItem(this[item], data) 
} 

这是我的原因如下建议:对于人类来说,没有电脑

  • 编写代码。更可读和可维护的解决方案是更好的解决方案。
  • d on't [R EPEAT Ÿ我们自己 - 尽量把常用的操作分成更小的功能(这不仅更容易维护,但该解释可以做出更好的优化)

注意如何testItem函数被重用,并且当item是狗或课程时执行相同的指令。此外,虽然这个样本没有任何平等的运营商,你应该使用===代替==在Javascript :)(我知道,这是混乱...)