将对象数组排序为更整洁的数组

时间:2018-12-03 17:41:59

标签: javascript arrays

我正在尝试将对象数组排序为具有特定属性的更干净的对象数组。

我正在获取一个返回大量对象的api

目前我还不知道如何获得这样的数组:

    results= [
{'author' : Mister1,'url':'http://url1.com','score':400},
{'author' : Mister2,'url':'http://url2.com','score':350},
{'author' : Mister3,'url':'http://url3.com','score':500},
{'author' : Mister4,'url':'http://url1.com','score':456},
]

这是我的代码:

function fetchSearchTopStories(term) {
    axios.get(`https://www.reddit.com/r/${term}/top.json`, { responseType: 'json' }).then(response => {
const tab = (response.data.data.children)
      for (let i = 0; i < tab.length; i++) {
       results.url= tab[i].data.url
       results.author = tab[i].data.author
       results.score= tab[i].data.score
        console.log(results)
      }
 return results
    })
}

不幸的是,这不是在数组中插入,而是每次创建一个只有一个字段而不是多个字段的新数组。

非常感谢您

2 个答案:

答案 0 :(得分:0)

您只需要创建一个数组来存储您的result。为了使其比for循环更容易,您可以使用.map()通过转换每个对象从旧数组创建一个新数组。

function fetchSearchTopStories(term) {
  axios.get(`https://www.reddit.com/r/${term}/top.json`, {
    responseType: 'json'
  }).then(response => {
    const tab = (response.data.data.children)
    const results = tab.map(t => {
      return {
        url: t.data.url,
        author: t.data.author,
        score: t.data.score
      }
    });
    console.log(results)
  });
}

fetchSearchTopStories('javascript');
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

答案 1 :(得分:0)

您还可以通过 ES6 和对象分解来使代码更简洁:

function fetchSearchTopStories(term) {
  axios.get(`https://www.reddit.com/r/${term}/top.json`, {
    responseType: 'json'
  }).then(r => console.log(r.data.data.children.map(({data}) => {
    let {url, author, score} = data
    return {url, author, score}
  })))
}

fetchSearchTopStories('javascript');
<script src="https://unpkg.com/axios@0.18.0/dist/axios.min.js"></script>