所以我有一个数组,其中包含几个编号相同的条目,如下所示:
var levels = new Object;
levels = {
0:{
name: "xxx1",
ratesBR: {
stone: 1,
wood: 5,
copper: 0,
}
ratesFS: {
food: 10,
water: 10,
sacrifice: 0,
}
}
1:{
name:"xxx2",
ratesBR: {
stone: 1,
wood: 5,
copper: 0,
}
ratesFS: {
food: 10,
water: 10,
sacrifice: 0,
}
}
}
所以我的问题是这样的,我想使用
if levels.XX.ratesBR.wood >= 1
但是我想知道用XX代替XX是什么,我最接近的是every()函数,但我认为这不是我想要的。我什至不知道“所有”指示符将被称为什么,所以我正在向你们寻求指导。谢谢。
最佳答案
所以我有一个数组...
那不是数组,而是一个非数组对象。它只是具有属性名称"0"
,"1"
等(是的,即使它们被写为数字,它们还是字符串)。
我最接近的是every()函数,但我认为这不是我想要的。
是的,但是将其应用于非数组对象有点尴尬。我们可以通过使用Object.keys
获取对象的键,然后在其上使用every
来实现。
在ES5中,您可以这样做:
if (Object.keys(levels).every(function(key) { return levels[key].ratesBR.wood >= 1; })) {
console.log("All are >= 1");
} else {
// No, at least one isn't
console.log("At least one isn't >= 1");
}
现场示例:
var levels = {
0: {
name: "xxx1",
//lifeStage:
ratesBR: {
stone: 1,
wood: 5,
copper: 0
},
ratesFS: {
food: 10,
water: 10,
sacrifice: 0
}
},
1: {
name: "xxx2",
//lifeStage:
ratesBR: {
stone: 2,
wood: 0,
copper: 0
},
ratesFS: {
food: 10,
water: 10,
sacrifice: 0
}
}
};
if (Object.keys(levels).every(function(key) { return levels[key].ratesBR.wood >= 1; })) {
console.log("All are >= 1");
} else {
// No, at least one isn't
console.log("At least one isn't >= 1");
}
在ES2015 +中,箭头功能可以使其更加简洁:
if (Object.keys(levels).every(key => levels[key].ratesBR.wood >= 1)) {
console.log("All are >= 1");
} else {
// No, at least one isn't
console.log("At least one isn't >= 1");
}
现场示例:
var levels = {
0: {
name: "xxx1",
//lifeStage:
ratesBR: {
stone: 1,
wood: 5,
copper: 0
},
ratesFS: {
food: 10,
water: 10,
sacrifice: 0
}
},
1: {
name: "xxx2",
//lifeStage:
ratesBR: {
stone: 2,
wood: 0,
copper: 0
},
ratesFS: {
food: 10,
water: 10,
sacrifice: 0
}
}
};
if (Object.keys(levels).every(key => levels[key].ratesBR.wood >= 1)) {
console.log("All are >= 1");
} else {
// No, at least one isn't
console.log("At least one isn't >= 1");
}
如果
levels
确实是一个数组(我建议这样做),则直接在其上使用every
即可:// IF `levels` WERE AN ARRAY
if (levels.every(entry => entry.ratesBR.wood >= 1)) {
console.log("All are >= 1");
} else {
// No, at least one isn't
console.log("At least one isn't >= 1");
}
现场示例:
var levels = [
{
name: "xxx1",
//lifeStage:
ratesBR: {
stone: 1,
wood: 5,
copper: 0
},
ratesFS: {
food: 10,
water: 10,
sacrifice: 0
}
},
{
name: "xxx2",
//lifeStage:
ratesBR: {
stone: 2,
wood: 0,
copper: 0
},
ratesFS: {
food: 10,
water: 10,
sacrifice: 0
}
}
];
if (levels.every(entry => entry.ratesBR.wood >= 1)) {
console.log("All are >= 1");
} else {
// No, at least one isn't
console.log("At least one isn't >= 1");
}
和ES5版本:
// IF `levels` WERE AN ARRAY
if (levels.every(function(entry) { return entry.ratesBR.wood >= 1; })) {
console.log("All are >= 1");
} else {
// No, at least one isn't
console.log("At least one isn't >= 1");
}