鍍金池/ 問答/Java  C  C++  HTML/ 這個(gè)數(shù)組邏輯該怎么實(shí)現(xiàn)?根據(jù)字段名求值

這個(gè)數(shù)組邏輯該怎么實(shí)現(xiàn)?根據(jù)字段名求值

圖片描述

  1. 2個(gè)數(shù)組,第一個(gè)劃線是字段名數(shù)組 要關(guān)聯(lián)到下面的數(shù)組,對(duì)應(yīng)字段名取時(shí)間;
  2. 大數(shù)組第一個(gè)字段名對(duì)應(yīng)的有時(shí)間,第二個(gè)沒時(shí)間的話,譬如第二個(gè)index是4,就判斷它后面所有的(紅圈里的)如果有時(shí)間的話就操作儀表盤隱藏,沒有時(shí)間都是null的話就本地時(shí)間減第一個(gè)時(shí)間;

這是我目前實(shí)現(xiàn)邏輯代碼,我該怎么寫?_valueStatu字段名數(shù)組,fieldsDatas二維數(shù)組;

      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)
                }
            }
        }

回答
編輯回答
掛念你

原答案里也沒什么 es5 寫不出來的東西吧...

var times = fieldsDatas.map(function (field) {
    var data = {};
    data[field['_state']] = field['_column'];
    return data;
})

if (times[_valueStatu[1]]) {
    // 存在第二個(gè)時(shí)間
} else {
    var offset = Object.keys(times).indexOf(_valueStatu[1]));
    var noneNull = Object.keys(times)
                        .map(function (key, index) { 
                            // 檢查是否已經(jīng)到了第二個(gè)查詢字段之后,因?yàn)槟泐}目中說是紅框中
                            return index <= offset ? null
                                            : times[key] === null})
                        .indexOf(true) === -1;
     if (noneNull) {
         // 都有時(shí)間值
     } else {
         // 存在 null 值
     }
}

先把第二個(gè)數(shù)組轉(zhuǎn)換一下:

let times = fieldsDatas.map(field => {
    let data = {};
    data[field['_state']] = field['_column'];
    return data;
})

然后就可以直接讀取了

if (times[_valueStatu[1]]) {
    // 存在第二個(gè)時(shí)間
} else {
    let offset = Object.keys(times).indexOf(_valueStatu[1]));
    let noneNull = Object.keys(times)
                        .map((key, index) => 
                            // 檢查是否已經(jīng)到了第二個(gè)查詢字段之后,因?yàn)槟泐}目中說是紅框中
                            index <= offset ? null
                                            : times[key] === null)
                        .indexOf(true) === -1;
    /**
     * 對(duì) times 數(shù)組進(jìn)行一次映射
     * 比如按照此題會(huì)得到
     * [null, null, null, null, null,
     *  true, false, false, false, true]
     * 那么這個(gè)數(shù)組中只要存在 true 
     * 即意味著原來的 times 數(shù)組里 InlabbingTime 之后的時(shí)間里有 null 值, 
     * 換句話說,如果找不到 true 那么原來的 times 數(shù)組里 InlabbingTime 之后的時(shí)間里全都不為空。
     **/
     if (noneNull) {
         // 都有時(shí)間值
     } else {
         // 存在 null 值
     }
}
2017年3月1日 15:50
編輯回答
尐飯團(tuán)

解決了,這是答案:

        var _fieldsTime_Value = "";
        var _fieldsTimeTdoOne = [];
        //第一個(gè)為0
        if (_fieldsTime[0] === null) {
            _fieldsTime_Value = 'none';
        }
        //兩個(gè)都有值
        if (!!_fieldsTime[0] && !!_fieldsTime[1]) {
            _fieldsTimeTdoOne = Math.round(parseInt(_fieldsTime[1] - _fieldsTime[0]) / 
            1000 / 60);              
        }
        //第一個(gè)有值,第二個(gè)沒值
        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)
            }
        }
2018年4月20日 05:33
編輯回答
祉小皓
    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時(shí)間不為null,將RegisterTime的時(shí)間加進(jìn)數(shù)組,且是第一次加入
                    flag1=true;
                }
                if(flag1&&aj==num&&fieldsTime==null){//第二個(gè)字段名對(duì)應(yīng)上,且沒時(shí)間的話
                    flag2=true;
                }
                if(flag2&&fieldsTime!=null){
                    _fieldsTime.push(fieldsTime);
                    break;
                }

            }
        } 
        console.log(_fieldsTime);//若數(shù)組里有兩個(gè)時(shí)間,第一個(gè)就是Register對(duì)應(yīng)的,第二個(gè)Inlabbing為null時(shí)后面的時(shí)間
        //若只有一個(gè)的話,那就是Register對(duì)應(yīng)的

不知道對(duì)不對(duì),我這是很粗糙、惡心的代碼,也不知道是否符合你所說的,哈哈

2017年2月9日 00:54
編輯回答
呆萌傻
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;
}
2017年1月25日 06:25