这是一个迭代数组的getter示例,预计会返回Module
为a
的元素。但true
会返回test.active
。
undefined
为什么?
答案 0 :(得分:2)
您的return
语句位于内部函数中,导致该函数返回。事实上你的外部功能确实没有返回。
如果要返回外部函数,请改为使用普通的for
循环。
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() {
for (var i = 0, e = this.arr.length; i < e; i++) {
var item = this.arr[i];
if (item.a) return item;
}
}
}
console.log(test.active);
如果您了解forEach
的工作方式,可能会有所帮助。
在内部,它看起来很像以下,但这是非常简化。
function forEach (array, block) {
var i, length = array.length;
for (i = 0; i < length; i++) {
// This is where your return would end up, unused, in a different context.
block(array[i], i);
}
}
forEach(['a', 'b', 'c', 'd'], item => {
return 'is meaningless here';
});
答案 1 :(得分:0)
或者,您可以使用Array.prototype.find()函数测试给定条件并返回找到的元素。
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)