【问题标题】:For each item in a loop, how would you iterate through and return an item in a different array?对于循环中的每个项目,您将如何迭代并返回不同数组中的项目?
【发布时间】: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中:

  1. 对于 {type: "flower", egg: "something"} => 返回 "flower_style_1"。
  2. 对于 {type: "flower", egg: "something2"} => 返回 "flower_style_2"。
  3. 不要为 {type: "notFlower", egg: "something3"} 返回任何内容
    因为它不是“类型”:花。
  4. 对于 {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


【解决方案1】:

      arrOfObjs =
[{type: "flower", egg: "something"},
{type: "flower", egg: "something2"},
{type: "notFlower", egg: "something3"},
{type: "flower", egg: "something4"}]

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"];


let getArray=[]; 
arrOfObjs?.forEach((arrItem,i) => {
        if (arrItem.type === 'flower') {
            getArray.push(allProperties[getArray.length]);
        }
    });  
    console.log(getArray);

【讨论】:

  • 这无法解决原问题中然后从头开始的要求。
猜你喜欢
  • 2016-03-12
  • 2015-03-10
  • 1970-01-01
  • 2015-02-23
  • 2022-07-12
  • 1970-01-01
  • 2021-03-02
  • 2017-10-18
  • 2020-09-05
相关资源
最近更新 更多