2017-04-08 325 views
-2

我有一個數組對象,如下所述;如何迭代數組中的對象?

var myArray=[{dateformat:"apr1", score:1},{dateformat:"apr2",score:2},{dateformat:"apr3",score:3}]; 

我想日期格式的值提取到一個單獨的數組,例如:

var dateArray=["apr1","apr2","apr3"]; 
var score=[1,2,3]; 

我使用的是for循環提取指標,但我沒能得到的值。

+1

* 「但我沒能得到的值」 * ...我們展示的代碼。 Stackoverflow不是一個免費的代碼編寫服務,它的想法是幫助你修復你的代碼**,但不能按預期執行 – charlietfl

回答

0

如果您只是不想對變量進行硬編碼,則可以使用Array#forEachObject.keys將每個唯一鍵值存儲在例如陣列。

注意:沒關係許多鑰匙你怎麼在你的對象,下面的解決方案總是會把你返回正確的輸出。請注意,您甚至不必首先聲明新的變量。

var myArray = [{dateformat:"apr1", score:1},{dateformat:"apr2",score:2},{dateformat:"apr3",score:3}], 
 
    obj = {}; 
 
    
 
    myArray.forEach(v => Object.keys(v).forEach(function(c) { 
 
     (obj[c] || (obj[c] = [])).push(v[c]); 
 
    })); 
 
    
 
    console.log(obj);

0

創建空陣列,以及使用的forEach與「元素」(其代表陣列中的每個對象),並且每個的性質的推埃施的參數對象成所需的陣列。

var dateArray=[]; 
 
var score=[]; 
 
    
 
var myArray=[ 
 
    {dateformat:"apr1", score:1}, 
 
    {dateformat:"apr2",score:2}, 
 
    {dateformat:"apr3",score:3} 
 
]; 
 
    
 

 
myArray.forEach(function(element) { 
 
    dateArray.push(element.dateformat); 
 
    score.push(element.score); 
 
}); 
 

 
console.log(dateArray); //gives ["apr1","apr2","apr3"] 
 
console.log(score); //gives ["1","2","3"]

0

這裏的答案是一個簡單的循環。

var dateArray = new Array(myArray.length); 
for(var i = 0; i < myArray.length; ++i) { 
     var value = myArray[i]; 
     var dateValue = value.dateformat; 
     dateArray[i] = dateValue; 
} 

您可以使用map函數完成相同的:

var dateArray = myArray.map(function(value) { return value.dateformat; }); 
1

使用map遍歷初始數組對象,並返回所需的項目。

var myArray=[{dateformat:"apr1", score:1},{dateformat:"apr2",score:2},{dateformat:"apr3",score:3}]; 
 

 
var dateArray = myArray.map(function(obj){return obj.dateformat;}), 
 
    score = myArray.map(function(obj){return obj.score}); 
 
    
 
console.log(dateArray); 
 
console.log(score);

0

您可以使用給定數組的單循環方式和重複鍵和推值到想要的陣列。

var myArray = [{ dateformat: "apr1", score: 1 }, { dateformat: "apr2", score: 2 }, { dateformat: "apr3", score: 3 }], 
 
    dateArray = [], 
 
    score = []; 
 

 
myArray.forEach(function (target, keys) { 
 
    return function(a) { 
 
     keys.forEach(function(k, i) { 
 
      target[i].push(a[k]); 
 
     }); 
 
    }; 
 
}([dateArray, score], ['dateformat', 'score'])); 
 

 
console.log(dateArray); 
 
console.log(score);

+0

爲什麼使用'reduce'?您的step函數使用累加器'r'並返回它,即所有步驟都使用相同的累加器(它是循環內的常量)。爲什麼不使用'forEach'呢? – melpomene

+0

@melpomene,對,只是把它改爲閉包。 –