为了账号安全,请及时绑定邮箱和手机立即绑定

这个数组逻辑该怎么实现?根据字段名求值

这个数组逻辑该怎么实现?根据字段名求值

至尊宝的传说 2019-03-05 17:12:43
2个数组,第一个划线是字段名数组 要关联到下面的数组,对应字段名取时间;大数组第一个字段名对应的有时间,第二个没时间的话,譬如第二个index是4,就判断它后面所有的(红圈里的)如果有时间的话就操作仪表盘隐藏,没有时间都是null的话就本地时间减第一个时间;这是我目前实现逻辑代码,我该怎么写?_valueStatu字段名数组,fieldsDatas二维数组;      var _fieldsTime = [];        for(var i = 0; i < _valueStatu.length; i++){            for(var j = 0; j < fieldsDatas.length; j++){                if(_valueStatu[i] == fieldsDatas[j]._state){                    _fieldsTime.push(fieldsDatas[j]._column)                }            }        }
查看完整描述

4 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞


解决了,这是答案:


        var _fieldsTime_Value = "";

        var _fieldsTimeTdoOne = [];

        //第一个为0

        if (_fieldsTime[0] === null) {

            _fieldsTime_Value = 'none';

        }

        //两个都有值

        if (!!_fieldsTime[0] && !!_fieldsTime[1]) {

            _fieldsTimeTdoOne = Math.round(parseInt(_fieldsTime[1] - _fieldsTime[0]) / 

            1000 / 60);              

        }

        //第一个有值,第二个没值

        if (!!_fieldsTime[0] && !_fieldsTime[1]) {

            var start = fieldsDatas.length;

            var none = false

            for (let i = 0; i < fieldsDatas.length; i++) {

                if (fieldsDatas[i]._state == _valueStatu[1]) {

                    start = i

                    break;

                }

            }

            for (let j = start; j < fieldsDatas.length; j++) {

                if (fieldsDatas[j]._column) {

                    none = true

                }

            }

            if (none) {

                _fieldsTime_Value = 'none'

            } else {

                _fieldsTimeTdoOne = Math.round(parseInt(new Date().getTime() - new 

                Date(_fieldsTime[0]).getTime()) / 1000 / 60);

                console.log(_fieldsTimeTdoOne)

            }

        }


查看完整回答
反对 回复 2019-03-15
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

原答案里也没什么 es5 写不出来的东西吧...


var times = fieldsDatas.map(function (field) {

    var data = {};

    data[field['_state']] = field['_column'];

    return data;

})


if (times[_valueStatu[1]]) {

    // 存在第二个时间

} else {

    var offset = Object.keys(times).indexOf(_valueStatu[1]));

    var noneNull = Object.keys(times)

                        .map(function (key, index) { 

                            // 检查是否已经到了第二个查询字段之后,因为你题目中说是红框中

                            return index <= offset ? null

                                            : times[key] === null})

                        .indexOf(true) === -1;

     if (noneNull) {

         // 都有时间值

     } else {

         // 存在 null 值

     }

}

先把第二个数组转换一下:


let times = fieldsDatas.map(field => {

    let data = {};

    data[field['_state']] = field['_column'];

    return data;

})

然后就可以直接读取了


if (times[_valueStatu[1]]) {

    // 存在第二个时间

} else {

    let offset = Object.keys(times).indexOf(_valueStatu[1]));

    let noneNull = Object.keys(times)

                        .map((key, index) => 

                            // 检查是否已经到了第二个查询字段之后,因为你题目中说是红框中

                            index <= offset ? null

                                            : times[key] === null)

                        .indexOf(true) === -1;

    /**

     * 对 times 数组进行一次映射

     * 比如按照此题会得到

     * [null, null, null, null, null,

     *  true, false, false, false, true]

     * 那么这个数组中只要存在 true 

     * 即意味着原来的 times 数组里 InlabbingTime 之后的时间里有 null 值, 

     * 换句话说,如果找不到 true 那么原来的 times 数组里 InlabbingTime 之后的时间里全都不为空。

     **/

     if (noneNull) {

         // 都有时间值

     } else {

         // 存在 null 值

     }

}


查看完整回答
反对 回复 2019-03-15
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

  var _valueStatu=['RegisterTime','InlabbingTime'];

    var fieldsDatas = [{_state:'re',_column:20161},{_state:'li',_column:20162},{_state:'lii',_column:20163},{_state:'RegisterTime',_column:20164},{_state:'InlabbingTime',_column:null},{_state:'re',_column:null},{_state:'rxe',_column:null},{_state:'rce',_column:null},{_state:'rze',_column:null},{_state:'rce',_column:null},{_state:'red',_column:20166}];

     var flag1=false;

     var flag2=false;

     var _fieldsTime=[];

      for(var i = 0; i < _valueStatu.length; i++){

            var aj = _valueStatu[i];

            for(var j = 0; j < fieldsDatas.length; j++){

                var obj = fieldsDatas[j];

                var num = obj._state;

                var fieldsTime = obj._column;

                if(aj == num&&fieldsTime!=null){

                    _fieldsTime.push(fieldsTime);//若Register时间不为null,将RegisterTime的时间加进数组,且是第一次加入

                    flag1=true;

                }

                if(flag1&&aj==num&&fieldsTime==null){//第二个字段名对应上,且没时间的话

                    flag2=true;

                }

                if(flag2&&fieldsTime!=null){

                    _fieldsTime.push(fieldsTime);

                    break;

                }


            }

        } 

        console.log(_fieldsTime);//若数组里有两个时间,第一个就是Register对应的,第二个Inlabbing为null时后面的时间

        //若只有一个的话,那就是Register对应的

不知道对不对,我这是很粗糙、恶心的代码,也不知道是否符合你所说的,哈哈


查看完整回答
反对 回复 2019-03-15
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

var _fieldsTime = [];

var time = null;

for(var i = 0; i < _valueStatu.length; i++){

    for(var j = 0; j < fieldsDatas.length; j++) {

        if (_valueStatu[i] == fieldsDatas[j]._state) {

            time = fieldsDatas[j]._column;

            if (equalToNull(time)) {

                return handler(j + 1, ,);

            }

            _fieldsTime.push(time);

            break;

        }

    }

}


// 

function handler (index, allnull, notallnull) {

    var length = fieldsDatas.length;

    for(var i = index; i < length; i++) {

        if (!equalToNull(fieldsDatas[i])) {

            notallnull();

            return;

        }

    }

    allnull();

}


function equalToNull (value) {

    return value == null;

}


查看完整回答
反对 回复 2019-03-15
  • 4 回答
  • 0 关注
  • 465 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号