2016-02-20 126 views
2

我正在尋找按名稱拆分json對象的最明智的方法,但我還沒有找到正確的答案。按名稱拆分json對象

JSON的看起來像這樣:

[{ 
    "Date": "2016-02-17", 
    "ProductionAvg": 0.014558 
}, { 
    "Date": "2016-02-18", 
    "ProductionAvg": 0.014154 
}] 

我需要將物體與每個對剛剛值分成數組:

[2016-02-17, 2016-02-18] 

[0.014558, 0.014154] 

的代碼我現在想出的是:

var date = [] 
var production = [] 

$.each(data, function() { 
    $.each(this, function (name, value) { 
     if (name == "Date") { 
      date.push(value); 
     } 
     if (name == "ProductionAvg") { 
      production.push(value); 
     } 
     } 
    }); 
}); 

但是,作爲新手,我並不確定這是否是達到此目的的標準方式。任何意見都非常感謝。

回答

1

您可以使用高階函數圖從數組中創建新數組。

如果您保存您的JSON到一個變量ARR你可以這樣做:

var dates = arr.map(x=>{ 
    return x.Date; 
}); 

var production = arr.map(x=>{ 
    return x.ProductionAvg; 
}); 
+0

偉大的答案,大家好,非常感謝您的快速回復。我採用這種解決方案,但都比我的最初更好。我很樂意接受所有,但是這是不可行的,然而,我提高了所有。 –

2

只要您知道所有屬性名稱,您擁有什麼就沒有問題。

如果您想讓它更整潔,更動態,可以將所有結果存儲在另一個對象中,每個屬性與源屬性名稱相同,值是從源中提取的值,例如。

{ 
    "Date": ["2016-02-17", "2016-02-18"], 
    "ProductionAvg": [0.014558, 0.014154] 
} 

這只是需要檢查結果對象中是否存在屬性,如果沒有,則將其設置爲空數組。然後,只需當前值推到它:

var arr = [{ 
 
    "Date": "2016-02-17", 
 
    "ProductionAvg": 0.014558 
 
}, { 
 
    "Date": "2016-02-18", 
 
    "ProductionAvg": 0.014154 
 
}] 
 

 
results = {}; 
 
$.each(arr, function() { // loop array 
 
    $.each(this, function(k, v) { // loop object 
 
    // if result does not have property name, create it with empty array 
 
    if(typeof(results[k]) === "undefined") { 
 
     results[k] = []; 
 
    } 
 
    
 
    // push the value to the result array 
 
    results[k].push(v); 
 
    }) 
 
}); 
 

 
console.dir(results);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

1

這裏是這樣做,通過利用hasOwnProperty一個更好的方式。而且,通過嵌套$.each這不是必需的,你會阻礙應用程序的性能。

請找到代碼here

代碼:

var data = [{ 
    "Date": "2016-02-17", 
    "ProductionAvg": 0.014558 
}, { 
    "Date": "2016-02-18", 
    "ProductionAvg": 0.014154 
}]; 
var date = [] 
var production = [] 

$.each(data, function (key, value) { 
    if (value.hasOwnProperty('Date')) { 
     date.push(value.Date); 
    } 
    if (value.hasOwnProperty('ProductionAvg')) { 
     production.push(value.ProductionAvg); 
    } 
}); 

document.write('date = ' + date + ', Production = ' + production); 
console.log(date, production); 
1

當你正在尋找最聰明的方式,使用普通的JavaScript。

var arr = [{ 
    "Date": "2016-02-17", 
    "ProductionAvg": 0.014558 
}, { 
    "Date": "2016-02-18", 
    "ProductionAvg": 0.014154 
}]; 

function groups(arr) { 
    var obj = {}; 
    arr.forEach(function(val) { 
     var keys = Object.keys(val); 
     keys.forEach(function(v) { 
      if (obj[v]) { 
       return obj[v].push(val[v]); 
      } 
      obj[v] = [val[v]]; 
     }); 
    }); 

    return obj; 
} 

console.log(groups(arr))