为啥 forEach 函数不让我返回一个对象,甚至只是将它从函数中传递出去?
Posted
技术标签:
【中文标题】为啥 forEach 函数不让我返回一个对象,甚至只是将它从函数中传递出去?【英文标题】:Why isn't forEach function letting me returning an object or even just passing it out from the function?为什么 forEach 函数不让我返回一个对象,甚至只是将它从函数中传递出去? 【发布时间】:2019-06-28 13:54:05 【问题描述】:我正在尝试制作一个简单的应用程序来显示和保存您的收藏夹(让我们轻松地称它们为“对象”)。我想这样做: 得到 vuex 的最爱, 在可能的收藏夹中找到最喜欢的, 随心所欲地管理我的最爱。
name 值是正确的,我已经知道 vuex 的状态。 Elenco 是一个由 JSON 获得的数组,它之所以有效,是因为我在 v-for 和其他两个函数中使用了它(没有一个使用 forEach 函数)。 if 语句效果很好,否则它不会显示第一个“i”。
let name = this.$store.state.favTime.id;
console.log(name);
Elenco.forEach(element =>
if(element.name === name)
var i = element;
console.log(i); //element
);
console.log(i); //undefined
我只想访问那个对象,以便我可以操作它,但我不能,因为它是未定义的。
(希望正确地遵循这些准则,并希望我的英语足够好,使其易于理解,谢谢)。
【问题讨论】:
你已经定义了`var i = element;在 forEach 内部并尝试在其范围之外访问。在 forEach 之外声明它 ` 在 forEach 之前声明i
将使其在循环之后的范围内,但它将包含 Elenco 中的最后一个元素,而不是具有匹配名称的那个。
【参考方案1】:
如果需要在 for 循环之后访问该变量,请在循环之前声明它:
var i;
Elenco.forEach(element =>
if(element.name === name)
i = element;
console.log(i); //element
);
console.log(i);
【讨论】:
【参考方案2】:您可能想使用.find()
let name = this.$store.state.favTime.id;
let elem = Elenco.find(element =>
return element.name === name
);
console.log(element);
find() 方法返回数组中第一个元素的值 满足提供的测试功能。否则 undefined 是 返回。
如果要查找最后一个元素,可以reverse数组:
let name = this.$store.state.favTime.id;
let elem = [...Elenco].reverse().find(element =>
return element.name === name
);
console.log(element);
【讨论】:
这在功能上与 OP 的代码不同。 OP 的代码会将最后一个匹配项存储在i
中,您的代码将返回第一个匹配项。如果那是 OP 需要的,我们都不知道,但您的回答无法解释这一点。
@connexo 你说得对,我更新了答案以匹配 OP 的情况。
您仍然没有明确声明您的第一种方法将返回第一个匹配项。
@connexo 我认为没有必要,因为我把链接放到了 find()
的 MDN,【参考方案3】:
如果可用,我建议您使用 find
而不是 forEach
。
const name = this.$store.state.favTime.id;
const favourite = Elenco.find(element => element.name === name)
console.log(favourite)
【讨论】:
这在功能上与 OP 的代码不同。 OP 的代码会将最后一个匹配项存储在 i 中,您的代码将返回第一个匹配项。如果那是 OP 需要的,我们都不知道,但您的回答无法解释这一点。【参考方案4】:这是变量的局部和全局范围的问题。在 for 循环中创建的变量具有局部引用,因此请全局声明它们。
var name = "Johnny";
var Elenco = [
name: "Jack Torrance",
age: 50,
eyeColor: "blue"
,
name: "Toni",
age: 8,
eyeColor: "blue"
,
name: "Johnny",
age: 50,
eyeColor: "blue"
];
var i = new Array();
Elenco.forEach(element =>
if(element.name === name)
i.push(element);
console.log(i); //element
);
console.log(i);
【讨论】:
以上是关于为啥 forEach 函数不让我返回一个对象,甚至只是将它从函数中传递出去?的主要内容,如果未能解决你的问题,请参考以下文章