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)=>{