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

https://img3.mukewang.com/5c8b1331000121ed04800249.jpg

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)

                }

            }

        }


至尊宝的传说
浏览 466回答 4
4回答

慕勒3428872

解决了,这是答案:&nbsp; &nbsp; &nbsp; &nbsp; var _fieldsTime_Value = "";&nbsp; &nbsp; &nbsp; &nbsp; var _fieldsTimeTdoOne = [];&nbsp; &nbsp; &nbsp; &nbsp; //第一个为0&nbsp; &nbsp; &nbsp; &nbsp; if (_fieldsTime[0] === null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fieldsTime_Value = 'none';&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; //两个都有值&nbsp; &nbsp; &nbsp; &nbsp; if (!!_fieldsTime[0] && !!_fieldsTime[1]) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fieldsTimeTdoOne = Math.round(parseInt(_fieldsTime[1] - _fieldsTime[0]) /&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1000 / 60);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; //第一个有值,第二个没值&nbsp; &nbsp; &nbsp; &nbsp; if (!!_fieldsTime[0] && !_fieldsTime[1]) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var start = fieldsDatas.length;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var none = false&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (let i = 0; i < fieldsDatas.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (fieldsDatas[i]._state == _valueStatu[1]) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; start = i&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (let j = start; j < fieldsDatas.length; j++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (fieldsDatas[j]._column) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; none = true&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (none) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fieldsTime_Value = 'none'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fieldsTimeTdoOne = Math.round(parseInt(new Date().getTime() - new&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Date(_fieldsTime[0]).getTime()) / 1000 / 60);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(_fieldsTimeTdoOne)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }

叮当猫咪

原答案里也没什么 es5 写不出来的东西吧...var times = fieldsDatas.map(function (field) {&nbsp; &nbsp; var data = {};&nbsp; &nbsp; data[field['_state']] = field['_column'];&nbsp; &nbsp; return data;})if (times[_valueStatu[1]]) {&nbsp; &nbsp; // 存在第二个时间} else {&nbsp; &nbsp; var offset = Object.keys(times).indexOf(_valueStatu[1]));&nbsp; &nbsp; var noneNull = Object.keys(times)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(function (key, index) {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 检查是否已经到了第二个查询字段之后,因为你题目中说是红框中&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return index <= offset ? null&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : times[key] === null})&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .indexOf(true) === -1;&nbsp; &nbsp; &nbsp;if (noneNull) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 都有时间值&nbsp; &nbsp; &nbsp;} else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 存在 null 值&nbsp; &nbsp; &nbsp;}}先把第二个数组转换一下:let times = fieldsDatas.map(field => {&nbsp; &nbsp; let data = {};&nbsp; &nbsp; data[field['_state']] = field['_column'];&nbsp; &nbsp; return data;})然后就可以直接读取了if (times[_valueStatu[1]]) {&nbsp; &nbsp; // 存在第二个时间} else {&nbsp; &nbsp; let offset = Object.keys(times).indexOf(_valueStatu[1]));&nbsp; &nbsp; let noneNull = Object.keys(times)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map((key, index) =>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 检查是否已经到了第二个查询字段之后,因为你题目中说是红框中&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index <= offset ? null&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : times[key] === null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .indexOf(true) === -1;&nbsp; &nbsp; /**&nbsp; &nbsp; &nbsp;* 对 times 数组进行一次映射&nbsp; &nbsp; &nbsp;* 比如按照此题会得到&nbsp; &nbsp; &nbsp;* [null, null, null, null, null,&nbsp; &nbsp; &nbsp;*&nbsp; true, false, false, false, true]&nbsp; &nbsp; &nbsp;* 那么这个数组中只要存在 true&nbsp;&nbsp; &nbsp; &nbsp;* 即意味着原来的 times 数组里 InlabbingTime 之后的时间里有 null 值,&nbsp;&nbsp; &nbsp; &nbsp;* 换句话说,如果找不到 true 那么原来的 times 数组里 InlabbingTime 之后的时间里全都不为空。&nbsp; &nbsp; &nbsp;**/&nbsp; &nbsp; &nbsp;if (noneNull) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 都有时间值&nbsp; &nbsp; &nbsp;} else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 存在 null 值&nbsp; &nbsp; &nbsp;}}

神不在的星期二

&nbsp; var _valueStatu=['RegisterTime','InlabbingTime'];&nbsp; &nbsp; 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}];&nbsp; &nbsp; &nbsp;var flag1=false;&nbsp; &nbsp; &nbsp;var flag2=false;&nbsp; &nbsp; &nbsp;var _fieldsTime=[];&nbsp; &nbsp; &nbsp; for(var i = 0; i < _valueStatu.length; i++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var aj = _valueStatu[i];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(var j = 0; j < fieldsDatas.length; j++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var obj = fieldsDatas[j];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var num = obj._state;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var fieldsTime = obj._column;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(aj == num&&fieldsTime!=null){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fieldsTime.push(fieldsTime);//若Register时间不为null,将RegisterTime的时间加进数组,且是第一次加入&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag1=true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(flag1&&aj==num&&fieldsTime==null){//第二个字段名对应上,且没时间的话&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag2=true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(flag2&&fieldsTime!=null){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fieldsTime.push(fieldsTime);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; console.log(_fieldsTime);//若数组里有两个时间,第一个就是Register对应的,第二个Inlabbing为null时后面的时间&nbsp; &nbsp; &nbsp; &nbsp; //若只有一个的话,那就是Register对应的不知道对不对,我这是很粗糙、恶心的代码,也不知道是否符合你所说的,哈哈

蛊毒传说

var _fieldsTime = [];var time = null;for(var i = 0; i < _valueStatu.length; i++){&nbsp; &nbsp; for(var j = 0; j < fieldsDatas.length; j++) {&nbsp; &nbsp; &nbsp; &nbsp; if (_valueStatu[i] == fieldsDatas[j]._state) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time = fieldsDatas[j]._column;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (equalToNull(time)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return handler(j + 1, ,);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fieldsTime.push(time);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}//&nbsp;function handler (index, allnull, notallnull) {&nbsp; &nbsp; var length = fieldsDatas.length;&nbsp; &nbsp; for(var i = index; i < length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; if (!equalToNull(fieldsDatas[i])) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; notallnull();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; allnull();}function equalToNull (value) {&nbsp; &nbsp; return value == null;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript