【问题标题】:Using a function to loop through an array and push object into empty array in Javascript使用函数循环遍历数组并将对象推入Javascript中的空数组
【发布时间】:2018-09-10 16:54:01
【问题描述】:

我正在尝试创建一个名为 addToList 的函数,该函数循环遍历 var movies 并将所有内容推送到我的空数组 var movieList。这是我的代码...

    var movies = [
      { title: 'matrix', id: 0},
      { title:'the dark knight', id: 1},
      { title:'a beautiful mind', id: 2},
      { title:'american pie', id: 3}
    ]

    function addToList(movies) {
      var movieList = {};

      for(var key in movies)
        movieList.push(movies[key])
      }

      return movieList

    addToList(movies)

我正在尝试获得以下回报:

[
  '{title:matrix, id:0}',
  '{title:the dark knight, id:1}',
  '{title:a beautiful mind, id:2}',
  '{title:american pie, id:3}'
]

我不确定为什么我的代码不起作用。

【问题讨论】:

  • 查看浏览器开发工具控制台中抛出的错误。无法推送到对象 ..{} ... 错误应该会给你一个线索。假设您遇到该错误
  • 所以您只想复制第一个数组,但将第一个数组中的对象转换为字符串?
  • 我修正了你代码的格式,这至少应该使它的一个问题非常明显。使用正确的格式可以帮助显示其中的一些内容,但是在堆栈溢出问题中发布甚至在语法上无效(即根本不会运行)的代码通常是不可行的,除非您特别询问语法。

标签: javascript loops object


【解决方案1】:

使用map()JSON.stringify().replace(/"|'/g,""),您可以获得所需的输出。

var movies = [
    { title: 'matrix', id: 0},
    { title:'the dark knight', id: 1},
    { title:'a beautiful mind', id: 2},
    { title:'american pie', id: 3}
  ];

  movies = movies.map(o=>JSON.stringify(o).replace(/"|'/g,""))

  console.log(movies)

您的代码无法正常工作,因为您正试图推入一个对象,如果您将movieList = {} 更改为movieList = [] 应该可以工作,但不是您想要的输出,它是一个类似于JSON 的字符串数组。这就是为什么您可以将每个对象转换为 JSON,然后删除引号,例如您的示例。

var movies = [
    { title: 'matrix', id: 0},
    { title:'the dark knight', id: 1},
    { title:'a beautiful mind', id: 2},
    { title:'american pie', id: 3}
  ]

  function addToList(movies) {
    var movieList = [];

    for(var key in movies){
      movieList.push(movies[key])//<-- objects into an array
    }

    return movieList
}

  console.log(addToList(movies))

【讨论】:

    【解决方案2】:

    您的代码中有几个语法错误,return 语句需要在函数内部,并且永远不要使用for..in 来迭代数组

    var movies = [{
        title: 'matrix',
        id: 0
      },
      {
        title: 'the dark knight',
        id: 1
      },
      {
        title: 'a beautiful mind',
        id: 2
      },
      {
        title: 'american pie',
        id: 3
      }
    ]
    
    function addToList(movies) {
      var movieList = [];
      movies.forEach((item) => {
        movieList.push(JSON.stringify(item))
    
      })
      return movieList
    }
    
    
    console.log(addToList(movies))

    【讨论】:

    • 可能还提到你不能.push 到一个对象上。
    • 这会执行 OP “说”他想要的操作,但不会输出 OP “显示”的相同输出。在 OP 澄清所需结果之前,不确定这是否正确。
    • .forEach() + .push() = .map()
    • 为什么提倡使用循环和函数来复制数组?似乎movies.slice() 是一个更好的选择。
    • @Andreas 我认为OP想使用变量,这里不清楚,
    猜你喜欢
    • 2011-08-16
    • 2015-10-15
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2023-02-02
    相关资源
    最近更新 更多