Javascript 表示;“全部”;从数组中提取数据时

Javascript 表示;“全部”;从数组中提取数据时,javascript,arrays,Javascript,Arrays,所以我有一个数组,它包含几个完全相同的编号条目,如下所示: var levels = new Object; levels = { 0:{ name: "xxx1", ratesBR: { stone: 1, wood: 5, copper: 0, } ratesFS: { food: 10, water:

所以我有一个数组,它包含几个完全相同的编号条目,如下所示:

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 (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");
}
所以我的问题是,假设我想检查“石头”在所有“等级”(0,1等)中是否大于或等于1,使用

但是,我想知道我可以用什么来代替XX来表示我所看到的“所有”,最近的一个是every()函数,但我不认为这就是我要寻找的。我甚至不知道“所有”能指会被称为什么,所以我转向你们寻求一个前进的方向。谢谢

所以我有一个数组

这不是数组,而是非数组对象。它只有属性名
“0”
“1”
,等等(是的,它们是字符串,尽管它们被写成了数字)

我最接近的是every()函数,但我不认为这是我想要的

是的,但将其应用于非数组对象有点尴尬。我们可以使用
Object.keys
获取对象的键,然后使用
every

在ES5中,您可以这样做:

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 (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级别={
0: {
名称:“xxx1”,
//生命阶段:
费率br:{
斯通:1,
伍德:5,
铜:0
},
评分标准:{
食物:10,
水:10,
牺牲:0
}
},
1: {
名称:“xxx2”,
//生命阶段:
费率br:{
斯通:2,
伍德:0,
铜:0
},
评分标准:{
食物:10,
水:10,
牺牲:0
}
}
};
if(Object.keys(levels).every(函数(键){返回级别[key].ratesBR.wood>=1;})){
console.log(“全部大于等于1”);
}否则{
//不,至少有一个不是
log(“至少有一个不是>=1”);

}
您可以这样做:

var levels = {
  0:{
    name: "xxx1",
    //lifeStage: 
    ratesBR: {
      stone: 1,
      wood: 5,
      copper: 0
    },
    ratesFS: {
    food: 10,
    water: 10,
    sacrifice: 0
  }
},
1:{
    name: "xxx1",
    //lifeStage: 
    ratesBR: {
      stone: 1,
      wood: 5,
      copper: 0
    },
    ratesFS: {
    food: 10,
    water: 10,
    sacrifice: 0
  }
}
}

var array = $.map(levels, function(value, index) {
    return [value];
});
for(var i =0; i < array.length; i++){
  console.log(array[i].ratesBR.stone);
}
var级别={
0:{
名称:“xxx1”,
//生命阶段:
费率br:{
斯通:1,
伍德:5,
铜:0
},
评分标准:{
食物:10,
水:10,
牺牲:0
}
},
1:{
名称:“xxx1”,
//生命阶段:
费率br:{
斯通:1,
伍德:5,
铜:0
},
评分标准:{
食物:10,
水:10,
牺牲:0
}
}
}
变量数组=$.map(级别、函数(值、索引){
返回[值];
});
对于(var i=0;i
这不是数组。问题上没有jQuery标记,也没有jQuery在任何地方使用。jQuery对非jQuery问题的回答没有用处;如果试图读取
undefined
ratesBR
,代码将失败。我看到了它,很抱歉我忘记添加var levels=new对象。@Akmedrah:这不会改变答案。我假设变量已声明,并且该语句的
=new Object
部分被丢弃,因为在下一个语句中覆盖
levels
中的值(使用通过对象初始值设定项创建的对象)。