【发布时间】:2021-09-26 18:16:19
【问题描述】:
我有一个这样的对象数组:
arrOfObjs =
[{type: "flower", egg: "something"},
{type: "flower", egg: "something2"},
{type: "notFlower", egg: "something3"},
{type: "flower", egg: "something4"}]
数组中的每个对象都有一个“类型”。每当用户单击页面上的某个项目时,就会将另一个对象添加到数组中,类型为“flower”或“notFlower”
我有另一个这样的数组:
allProperties =
["flower_style_1",
"flower_style_2",
"flower_style_3",
"flower_style_4",
"flower_style_5",
"flower_style_6",
"flower_style_7",
"flower_style_8"]
你可以说它本质上是flower_style_,然后是一个不超过 8 的数字。
对于 arrOfObjs 中 type = 花的每个项目,以及添加的任何新项目,都应该有一个 return 语句,其中返回的主题是来自 allProperties 数组的内容。
例如上面的arrOfObjs中:
- 对于 {type: "flower", egg: "something"} => 返回 "flower_style_1"。
- 对于 {type: "flower", egg: "something2"} => 返回 "flower_style_2"。
- 不要为 {type: "notFlower", egg: "something3"} 返回任何内容
因为它不是“类型”:花。 - 对于 {type: "flower", egg: "something4"} => 返回 "flower_style_3"。
- 等
返回 allProperties 中的所有项目后,从开头的flower_style_1 开始,并为 arrOfObjs 中的每个新项目返回它。
到目前为止,我已经编写了以下内容,这是一个通过 arrOfObjs 的 foreach 循环。
this.arrOfObjs?.forEach(arrItem => {
if (arrItem.type === 'flower') {
this.allProperties.forEach(element => {
return element;
}
}
});
但是它不起作用,我认为会有一种更有效的方法来实现这一点。尤其是没有一组flower_style_.......
有人知道如何实现上述目标吗?
【问题讨论】:
-
"我想要它,以便对于 arrOfObjs 数组中的每个项目和添加的任何新项目,我们从 allProperties 数组返回单个项目,并且每个新对象添加到 arrOfObjs,它返回下一个项目在 allProperties 中,它在 allProperties 中循环。” - 我很难理解这一段。
-
“一旦分配了 allProperties 中的所有项目” - 您的帖子说您希望将来自
allProperties的值返回,而不是“分配”。请澄清。 -
“它不起作用” - 表面上 它应该起作用(但它会运行得非常缓慢,因为它具有
O(n*m)时间复杂度),我的猜测是@ 987654326@ 和allProperties不是this的成员,但实际上是本地人。您是否收到运行时错误消息或任何其他信息? -
在
forEach内使用return并不会像您认为的那样做。您应该避免使用forEach,而更喜欢for(of)。 -
你可以用这个替换你低效的嵌套循环,顺便说一句:
arrOfObjs.filter( e => e.type === 'flower' ).map( ( e, idx ) => allProperties[idx % allProperties.length] )(这在O(n)时间运行,这比O(n*m)好得多) - 但是我认为你没有但要明白你想让你的程序做什么,因为你已经证明你还不明白什么是“返回”(我希望我没有听起来居高临下,如果我这样做了,我深表歉意)
标签: javascript arrays json loops foreach