4 回答

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

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

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对应的
不知道对不对,我这是很粗糙、恶心的代码,也不知道是否符合你所说的,哈哈

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;
}
添加回答
举报