映射数组并比较至少一个巧合

时间:2017-02-28 16:58:01

标签: javascript arrays

在javascript中,我有这种情况:

this.props.number始终为数字0,1或2

this.props.columnas是一个像这样的对象数组:

[
    {value:'1',text:'AA'},
    {value:'2',text:'BB'},
    {value:'3',text:'CC'},
    {value:'4',text:'DD'},
    {value:'5',text:'EE'},
    {value:'6',text:'FF'},
    {value:'7',text:'GG'}
]

selected是一个对象数组,如下所示:

[{col:"2", ope:"", val:""}, {col:"5", ope:"", val:""}, {col:"7", ope:"", val:""}, ]

我有这段代码:

this.props.columnas.map(function(col){
    if(this.props.number == 0) {
        if (col.value == selected[0].col)
            disabledIndice = true
        else
            disabledIndice = false;
    }
    else if(this.props.number == 1) {
        if (col.value == selected[0].col || col.value == selected[1].col)
            disabledIndice = true
        else
            disabledIndice = false;
    }
    else if(this.props.number == 2) {
        if (col.value == selected[0].col || col.value == selected[1].col || col.value == selected[2].col)
            disabledIndice = true
        else
            disabledIndice = false;
    }
return <option value={col.value} disabled={disabledIndice}>{col.text}</option>
}.bind(this))}

(忘记bindfunction和es5,无论如何我都会使用箭头功能。

时间太长而且我没有做我需要做的事情。我想在selected中再次使用地图来查找哪个col.valueselected上存储的selected相同。

在上面的代码中,我假设我有s why the code is using those ìf的3个对象,但情况并非总是如此。有时可能是1,2或3个对象,每种情况this.props.number(对象数量由this.props.columnas.map(function(col){ indicesYaSeleccionado.map(function(item){ if (col.value == item.col) disabledIndice = true else disabledIndice = false; }); return <option key={constant.guid()} value={col.value} disabled={disabledIndice}>{col.text}</option> }.bind(this)) 定义)。那很难看。

我尝试过这样的事情:

disabled

但是我总是得到disabledIndice = true,因为我要比较每个值,我需要至少在1次巧合中设置为var Test = "3700 NO LAND VALUE (Lease Property) (0.10)"; var Regex = /([\d]+[.][\d]+)/g; var output = Regex.exec(Test); alert(output[1]);

任何提示?这是一个很长的解释,抱歉。

2 个答案:

答案 0 :(得分:1)

根据我的理解,您只需查看当前col值是否在selected.val数组中。

this.props.columnas.map(function(col){

    let disabledIndice = 
        selected.findIndex(e => e.col === col.value) !== -1
        ? true : false

    return <option value={col.value} disabled={disabledIndice}>{col.text}</option>
}.bind(this))}

此代码应该可以正常工作。

答案 1 :(得分:1)

您必须将this.props重新添加到您的上下文变量中,但这应该涵盖它。我试着给你尽可能多的箭头功能。您的返回将破坏代码,但如果与React的JSX一起使用它应该可以正常工作。

&#13;
&#13;
//removed this.props references for the sake of this example
const columnas = [
    {value:'1',text:'AA'},
    {value:'2',text:'BB'},
    {value:'3',text:'CC'},
    {value:'4',text:'DD'},
    {value:'5',text:'EE'},
    {value:'6',text:'FF'},
    {value:'7',text:'GG'}
];
//could be 0, 1, or 2
let curNum = 1
let selected = [{col:"2", ope:"", val:""}, {col:"5", ope:"", val:""}, {col:"7", ope:"", val:""}, ]

columnas.map( el => {
  let disabledIndice = selected.every( sel => el.value == sel.col ) ? 
    true : false;
  
    return <option key={constant.guid()} value={col.value} disabled={disabledIndice}>{col.text}</option>
}.bind(this))
});
&#13;
&#13;
&#13;