mongodb 如何访问具有预定义变量的嵌套对象数组[duplicate]

nhjlsmyf  于 2022-11-03  发布在  Go
关注(0)|答案(2)|浏览(152)

此问题在此处已有答案

Dynamically access object property using variable(17个答案)
11天前关闭。
所以我试着只打印出年份数据,因为我想对它执行一些函数。q变量来自一个html表单,所以我们不知道用户将决定q的值是多少:
第一个

okxuctiv

okxuctiv1#

link I've added in the comment

const filtered = [{
    Year: '2019',
    score1: 88
  },
  {
    Year: '2020',
    score1: 89
  },
  {
    Year: '2021',
    score1: 90
  },
  {
    Year: '2022',
    score1: 91
  },
  {
    Year: '2023',
    score1: 92
  },
  {
    Year: '2023',
    score1: 100
  }
]

var q = "Year";
for (let i = 0; i < filtered.length; i++) {
  console.log(filtered[i][q]);
}
qqrboqgw

qqrboqgw2#

下面是你的片段修复:

const filtered = [
  { Year: '2019', score1: 88 },
  { Year: '2020', score1: 89 },
  { Year: '2021', score1: 90 },
  { Year: '2022', score1: 91 },
  { Year: '2023', score1: 92 },
  { Year: '2023', score1: 100 },
];

const q = 'Year';

for (let i = 0; i < filtered.length; i++) {
  console.log(filtered[i][q]);
}

你的代码不起作用的原因是,在循环的每次迭代中,你的代码都在过滤数组的每个对象中寻找一个名为q的属性,而不是你想要的filtered[i]."Year"。这无论如何都不会像你想要的那样起作用,因为这里的字符串是语法错误。
据我所知,唯一将变量插入到对象属性调用的方法是使用[]表示法,它接受一个字符串来指向对象属性。因此,在前面代码片段中的每次循环迭代中,实际读取的是filtered[i]["year"],这是有效的语法。
现在这是可行的,但是如果对象在您的控件中,我建议您坚持使用不需要[]语法的属性名称,事实上,您在示例中不需要这样做。此外,您可以使代码更可读。请考虑以下代码片段:

const filtered = [
  { year: '2019', score1: 88 },
  { year: '2020', score1: 89 },
  { year: '2021', score1: 90 },
  { year: '2022', score1: 91 },
  { year: '2023', score1: 92 },
  { year: '2023', score1: 100 },
];

for (let value of filtered) {
  console.log(value.year);
}

在此范例中,您可以直接在循环中呼叫属性,以移除[]属性呼叫语法的需求,并将"year"字串储存在变数中。
此外,与那些古老的for (i, condition, iteration)循环相反,您有一个更可读的for...of循环语句来定位数组中的每个对象。
如果你不太喜欢varconst / let,我会坚持一直使用const / let,因为它更符合“现代”JavaScript。
要了解这里所讨论的任何内容,MDN(一如既往)是学习任何Web开发的最佳起点。这里有一些有用的链接,与这里所讨论的内容相关:

希望这对你有帮助。

相关问题