2016-12-03 86 views
1

我想將一些對象從原始對象轉換爲數組變量。對於JavaScript中的對象,Array.prototype.map()等效於什麼

console.log("news len", news["articles"].length); // this comes out to 9 

for(var a in news["articles"]) { 
    var results = []; 
    results.push({ 
     title:news["articles"][a]["title"], 
     subtitle: news["articles"][a]["description"], 
     item_url:news["articles"][a]["title"], 
     image_url:news["articles"][a]["urlToImage"], 
    }); 
} 
console.log("results len",results.length); //only contains one entry 

有另一種方式來做到這一點,如果不是我在做什麼錯?

使用Node js,如果有幫助的話。

+0

可以添加你的對象的消息,請問在這 – Geeky

+0

內容看它看起來像新聞[」文章「]是一個數組,所以我們不只是映射那個? –

+0

爲了防止一些錯誤,比如重新初始化空數組,我建議在代碼的開頭預先聲明所有變量,直接在函數後面 - 這也包括'for'的變量。 –

回答

2

你可以直接使用的地圖,並在回調返回一個對象爲新陣列

var results = news.articles.map(function (a) { 
     return { 
      title: a.title, 
      subtitle: a.description, 
      item_url: a.title, 
      image_url: a.urlToImage 
     }; 
    }; 
+0

是的,我使用的是新聞對象本身,而不是news.articles。我的思考流逝,謝謝! – crod

2

的主要問題是,一個空數組你的循環再套results每次迭代:

var results=[]; 

如果前移到該聲明你的循環,你會得到的東西更接近你想要什麼。

這就是說,它看起來像news["articles"]已經一個數組,所以你可能只是使用Array.prototype.map

0
var results = []; 
news["articles"].map(function(val,idx){ 
    results.push({ 
     title: val["title"], 
     //etc 
    } 
}); 
相關問題