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

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");
}

10-04 16:03
查看更多