Javascript 为什么这个getter返回未定义?

Javascript 为什么这个getter返回未定义?,javascript,getter,Javascript,Getter,下面是一个getter示例,它在数组上迭代,并返回一个a为true的元素。但是test.active返回undefined var test = { arr: [ {id: 1, a: false}, {id: 2, a: false}, {id: 3, a: true}, {id: 4, a: false}, {id: 5, a: false}, ], get active() { this.arr.forEach(item =>

下面是一个getter示例,它在数组上迭代,并返回一个
a
true
的元素。但是
test.active
返回
undefined

var test = {
  arr: [
    {id: 1, a: false},
    {id: 2, a: false},
    {id: 3, a: true},
    {id: 4, a: false},
    {id: 5, a: false},
  ],
  get active() {
    this.arr.forEach(item => {
      if(item.a) return item
    })
  }
}

为什么?

您的
return
语句位于内部函数中,导致该函数返回。您的外部函数实际上不返回任何内容

如果希望外部函数返回,请改用正常的
for
循环

var测试={
arr:[
{id:1,a:false},
{id:2,a:false},
{id:3,a:true},
{id:4,a:false},
{id:5,a:false},
],
活跃起来{
for(var i=0,e=this.arr.length;iconsole.log(test.active)
您的
return
语句位于内部函数中,导致该函数返回。您的外部函数实际上不返回任何内容

如果希望外部函数返回,请改用正常的
for
循环

var测试={
arr:[
{id:1,a:false},
{id:2,a:false},
{id:3,a:true},
{id:4,a:false},
{id:5,a:false},
],
活跃起来{
for(var i=0,e=this.arr.length;iconsole.log(test.active)或者,您可以使用函数测试给定条件并返回找到的元素

var test = {
  arr: [
    {id: 1, a: false},
    {id: 2, a: false},
    {id: 3, a: true},
    {id: 4, a: false},
    {id: 5, a: false},
  ],
  get active() {
    return this.arr.find(item => {
      return (item.a === true);
    });
  }
}

alert(test.active.id)

或者,您可以使用函数测试给定条件并返回找到的元素

var test = {
  arr: [
    {id: 1, a: false},
    {id: 2, a: false},
    {id: 3, a: true},
    {id: 4, a: false},
    {id: 5, a: false},
  ],
  get active() {
    return this.arr.find(item => {
      return (item.a === true);
    });
  }
}

alert(test.active.id)

是此处使用的正确方法<代码>返回this.arr.find(item=>item.a)如果有多个元素具有
a===true
,该怎么办?是此处使用的正确方法<代码>返回this.arr.find(item=>item.a)如果有多个元素具有
a===true
,该怎么办?