对象数组根据元素属性值对数组进行二次判断

        let tobj = [
            {a:'',b:2},
            {a:'joke',b:8},
            {a:'',b:23},
        
        ]

代码如上,判定条件是这样的,如果tobj中某一项元素的a有值,那么查询其他元素的a是否也有数值,只要有一个元素的a的值是空的,就执行事件1,如果数组里面所有元素的a都有数值,或者都没有数值,那么执行事件2。
首要条件是循环所有元素看看有没有元素的a是有数值,然后才进行接下来的判断,求指点。

阅读 2.1k
3 个回答

几个方式供参考

if (tobj.every(x => x.a) || tobj.every(x => !x.a)) {
  event2()
} else {
  event1()
}
if (tobj.reduce((s, x) => s + (x.a ? 1 : 0), 0) % tobj.length) {
  event1()
} else {
  event2()
}

Arrayeverysome 了解下。

let tobj = [
            {a:'',b:2},
            {a:'joke',b:8},
            {a:'',b:23},
        
        ]
// 所有的 a 都有值,才是 true        
var test = tobj.every(function(item) {
            return item.a;
        });
       
// 只要有一个对象 a 属性有值,就返回 true  
var test1 = tobj.some(function(item) {
    return item.a;
});

如有帮助,麻烦点击下采纳,谢谢~

换一种思路,只要排除2的情况那就执行1

//只要a都为空,或者都非空就执行2
//否则执行1
let [allEmpey,allExist] = tobj.reduce( (pre,cur)=>
    (cur.a ? [false,pre[1]] : [pre[0],false]) //a空,排除都非空的情况;a有值,排除都是空的情况
    ,[true,true]) //默认都空true,都非空true;
//最后只要有一个true,就执行2
if(allEmpey||allExist) {
    console.log(2)
} else {
    console.log(1)
}
推荐问题