【问题标题】:In javascript, how to create a for loop that loops through all objects?在javascript中,如何创建一个循环遍历所有对象的for循环?
【发布时间】:2016-08-14 15:46:32
【问题描述】:

我想根据某些要求检查某些按钮是否可以点击,但我什至无法使功能的启动工作。

我有这个对象数组。每个对象都是一个按钮,其中一些有要求。例如:要使故事可点击,它需要 10 个想法,所以 story.ideaReq = 10。要获得 grana,您需要有 1 个故事,所以 grana.storyReq = 1

我的代码应该返回:

story ideaReq 10

即:

story.name = 故事,
req.name+'Req' = ideaReq 和
故事['ideaReq'] = 10

但它会返回:

story ideaReq undefined

如果我 console.log(story.ideaReq) 它可以完美运行,但我需要能够调用此函数(因为我将拥有比上述更多的对象)。

我错过了什么?

const numbers = [
  time = {
    'name': 'time',
    'in': 0,
    'val': 0
  },
  idea = {
    'name': 'idea',
    'in': 0,
    'val': 10,
    'time': 1
  },
  story = {
    'name': 'story',
    'in': 0,
    'val': 1,
    'time': 4,
    'ideaReq': 10
  },
  grana = {
    'name': 'grana',
    'in': 0,
    'val': 1,
    'time': 1,
    'storyReq': 1
  }
];


var checkButton = (button, req) => {

  let name = button.name,
    prop = req.name + 'Req';

  console.log(name, prop, name['prop']);
}

checkButton(story, idea);

【问题讨论】:

  • 您的数组语法无效。数组包含用逗号分隔的条目,而不是名称/值对。您的语法有点像对象初始化器,但您使用的是=,而您将使用:。所以const numbers = [ {name: 'time', in: 0, out: 0}, {/*...*/}];(请注意,我没有将属性名称放在任何引号中;您可以,如果您愿意,单引号或双引号都可以。)还要注意const 和一个从 ES2015(又名“ES6”)开始,您使用的其他东西很少是新的,所以如果您不进行转译,它只能在最新的 JavaScript 引擎上工作。
  • 或者你可以使用一个对象:const numbers = {time: {name: 'time', in: 0, out: 0}, idea: {/*...*/} };
  • 如果您使用实际数组,您的问题将得到回答here。如果您使用对象,您的问题将得到回答here
  • 最后:你的问题中根本没有 JSON,所以我删除了标签。 function 标签也无关紧要。
  • 语法错误,你可以在jsonlint.com验证你的javascript对象

标签: javascript variables object


【解决方案1】:

您的代码正在尝试访问 name 中的属性 prop。相反,您应该使用prop 存储的字符串访问button 的属性。

改变

console.log(name, prop, name['prop']);

console.log(name, prop, button[prop]);

const numbers = [
  time = {
    'name': 'time',
    'in': 0,
    'val': 0
  },
  idea = {
    'name': 'idea',
    'in': 0,
    'val': 10,
    'time': 1
  },
  story = {
    'name': 'story',
    'in': 0,
    'val': 1,
    'time': 4,
    'ideaReq': 10
  },
  grana = {
    'name': 'grana',
    'in': 0,
    'val': 1,
    'time': 1,
    'storyReq': 1
  }
];


var checkButton = (button, req) => {

  let name = button.name,
    prop = req.name + 'Req';

  console.log(name, prop, button[prop]);
}

checkButton(story, idea);

另外,如果你不声明你的变量,它们将是全局的,所以在你的数组初始化之前,你应该添加:

let time, idea, story, grana;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2018-01-19
    相关资源
    最近更新 更多