Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环通过一个对象或多个对象_Javascript_Loops_For Loop_Foreach_Iterator - Fatal编程技术网

Javascript 循环通过一个对象或多个对象

Javascript 循环通过一个对象或多个对象,javascript,loops,for-loop,foreach,iterator,Javascript,Loops,For Loop,Foreach,Iterator,有一个对象包含具有以下形式的对象: bigObject: { "a - values": { atr: true} "a - items": { atr: true} "a - others": { atr: false} "b - values": { atr: true} "b - items": { atr: true} "b - others": { atr: false} "c - values": { atr: false}

有一个对象包含具有以下形式的对象:

bigObject: {
    "a - values": { atr: true}
    "a - items": { atr: true}
    "a - others": { atr: false}
    "b - values": { atr: true}
    "b - items": { atr: true}
    "b - others": { atr: false}
    "c - values": { atr: false}
    "c - items": { atr: true}
    "c - others": { atr: false}
}
我在函数中使用这个对象来检查每次一个属性更改其布尔值时:
onButtonClicked(item)

它的作用类似于:

onButtonClicked(item) {
    bigObject[item.id].atr= !bigObject[item.id].atr;
}
在这个函数中,我希望拆分它们,以便能够分别检查以
a
b
c
开头的对象的值。为此我做了:
consttocheck=item.id.split(“-”[0]

这很好,如果单击了以a开头的对象,则只需要该对象

下一步是检查特定字母是否同时具有
true
false
属性

为此,我尝试这样做:

let countFalse = 0;
let countTrue = 0;

 bigObject.forEach(x => {
    if ((x.split("-")[0]) === toCheck) {
        if (x.atr) {
            countTrue++;
        } else countFalse++;
    }
    if (countTrue && countFalse) {
        console.log("has both true and false attributes");
    } else console.log("nope");
 });
因此,我拆分原始名称以除去(值、项、其他),然后我尝试计算真属性和假属性。如果两者都存在,则显示一条消息,否则为否


有点不对劲,但我不明白是什么。有什么想法吗?

您可以通过拆分
'-'
而不是
'-'
来迭代条目

var-bigObject={“a-values”:{atr:true},“a-items”:{atr:true},“a-others”:{atr:false},“b-values”:{atr:true},“b-items”:{atr:true},“b-others”:{atr:false},“c-items”:{atr:true},“c-others”:{atr:false},
countFalse=0,
countTrue=0,
toCheck='a';
Object.entries(bigObject.forEach([k,v])=>{
如果(k.split(“-”[0]!==toCheck){
回来
}
如果(v.atr){
countTrue++;
}否则{
countFalse++;
}
});
if(countTrue和countFalse){
log(“具有true和false属性”);
}否则{
控制台日志(“nope”);

}
您可以通过拆分
'-'
而不是
'-'
来迭代条目

var-bigObject={“a-values”:{atr:true},“a-items”:{atr:true},“a-others”:{atr:false},“b-values”:{atr:true},“b-items”:{atr:true},“b-others”:{atr:false},“c-items”:{atr:true},“c-others”:{atr:false},
countFalse=0,
countTrue=0,
toCheck='a';
Object.entries(bigObject.forEach([k,v])=>{
如果(k.split(“-”[0]!==toCheck){
回来
}
如果(v.atr){
countTrue++;
}否则{
countFalse++;
}
});
if(countTrue和countFalse){
log(“具有true和false属性”);
}否则{
控制台日志(“nope”);

}
据我所知,forEach不会迭代对象。我建议你用

const bigObjectKeys=Object.keys(bigObject)

然后像这样迭代:

bigObjectKeys.forEach(元素=>{ bigObject[元素]…})

或者使用lodash forEach,它可以迭代对象


据我所知,forEach不会迭代对象。我建议你用

const bigObjectKeys=Object.keys(bigObject)

然后像这样迭代:

bigObjectKeys.forEach(元素=>{ bigObject[元素]…})

或者使用lodash forEach,它可以迭代对象


您出错并需要修复的事情:

  • 遍历对象的
    /
  • 使用
    -
    拆分,而不是使用
    -
    拆分
  • 只有在完成对所有元素的迭代后,才使用
    进行检查
  • var countFalse=0;
    var countTrue=0;
    变量bigObject={
    “a-值”:{atr:true},
    “a-项目:{atr:true},
    “a-其他”:{atr:false},
    “b值”:{atr:true},
    “b-项目”:{atr:true},
    “b-其他”:{atr:false},
    “c-值”:{atr:false},
    “c-项目:{atr:true},
    “c-其他”:{atr:false}
    }
    var toCheck=“a”;
    key(bigObject).forEach(x=>{
    如果((x.split(“-”[0])==toCheck){
    if(bigObject[x].atr){
    countTrue++;
    }else countFalse++;
    }
    });
    if(countTrue和countFalse){
    log(“具有true和false属性”);
    
    }else console.log(“nope”)您出错并需要修复的事情:

  • 遍历对象的
    /
  • 使用
    -
    拆分,而不是使用
    -
    拆分
  • 只有在完成对所有元素的迭代后,才使用
    进行检查
  • var countFalse=0;
    var countTrue=0;
    变量bigObject={
    “a-值”:{atr:true},
    “a-项目:{atr:true},
    “a-其他”:{atr:false},
    “b值”:{atr:true},
    “b-项目”:{atr:true},
    “b-其他”:{atr:false},
    “c-值”:{atr:false},
    “c-项目:{atr:true},
    “c-其他”:{atr:false}
    }
    var toCheck=“a”;
    key(bigObject).forEach(x=>{
    如果((x.split(“-”[0])==toCheck){
    if(bigObject[x].atr){
    countTrue++;
    }else countFalse++;
    }
    });
    if(countTrue和countFalse){
    log(“具有true和false属性”);
    }else console.log(“nope”)
    可以对对象条目使用
    Array#filter
    Array#every

    const isMatching=(str)=>{
    常量arr=Object.entries(bigObject.filter(e=>e[0].startsWith(str));
    //确保每个条目与第一个条目具有相同的“atr”
    返回arr.every(e=>e[1].atr===arr[0][1].atr);
    }
    ['a','b','c'].forEach(s=>console.log(s,isMatching))
    
    常量bigObject={
    “a-值”:{atr:true},
    “a-项目:{atr:true},
    “a-其他”:{atr:false},
    “b值”:{atr:true},
    “b-项目”:{atr:true},
    “b-其他”:{atr:false},
    “c-值”:{atr:false},
    “c-项目:{atr:false},
    “c-其他”:{atr:false}
    }
    
    可以对对象条目使用
    Array#filter
    Array#every

    const isMatching=(str)=>{