2012-10-11 68 views
1

嘗試將一個JavaScript對象分割成一個哈希數組..我必須根據符號「|」的出現來拆分數組內的內容。將一個javascript對象分割爲一個鍵值數組

我輸入數組看起來像

{ 
     "testFieldNames": ["testNumber", "testName", "testDate1", "testDate2"] 
}, 
"data": [ 
    "4|Sam|2012-02-10T00:00Z", 
    "0|Wallace|1970-01-01T00:00Z|2012-02-10T00:00Z" 
] 
}; 

和預期輸出是[{"testNumber" : "4", "testName" : "Sam", "testDate1" : "2012-02-10T00:00Z", "testDate2" : "0"},{"testNumber" : "0", "testName" : "Wallace", "testDate1" : "1970-01-01T00:00Z", "testDate2" : "2012-02-10T00:00Z"}]

這是我試過..但它是不完整的。

http://jsfiddle.net/Dwfg6/1/

回答

3
var header = responseData.header.testFieldNames, 
    length = header.length, 
    result; 
result = responseData.data.map(function(el) { 
    var ret = {}, data = el.split('|'), i; 
    for (i=0; i < length; i++) { 
     ret[header[i]] = data[i]; 
    } 
    return ret; 
}); 

console.log(result); 

The demo.注:您可以使用jQuery.map方法,而不是對舊的瀏覽器

+0

這個看起來不錯!我的支票 –

+0

不錯。 len未使用。也許'使用嚴格'的功能? @xdazz – Aeoril

0
var responseData = { 
    "header": { 
     "testFieldNames": ["testNumber", "testName", "testDate1", "testDate2"] 
    }, 
    "data": [ 
     "4|Sam|2012-02-10T00:00Z|2012-02-10T00:00Z", 
     "0|Wallace|1970-01-01T00:00Z|2012-02-10T00:00Z" 
     ] 
}; 


function buildData(fields, data) { 
    var output = []; 
    if (fields && fields.length && data && data.length) { 
     for (var i = 0; i < data.length; i++) { 
      var row = data[i].split("|"); 
      output[i] = {}; 
      while (row.length) { 
       output[i][fields[4 - row.length]] = row.shift(); 
      } 
     } 
    } 
    return output; 
} 

console.log(buildData(responseData.header.testFieldNames, responseData.data)); 

小提琴:http://jsfiddle.net/FjJse/1/

0

我的回答:在Chrome

fiddle

function mapData (data) { 
    'use strict'; 

    var result=[]; 
    var i, j; 
    var values = []; 
    var resultObj; 

    for(i=0; i < data.testFieldValues.length; i += 1) { 
     values = data.testFieldValues[i].split("|"); 
     resultObj = {}; 
     for(j = 0; j < data.testFieldNames.length; j += 1) { 
      resultObj[data.testFieldNames[j]] = values[j]; 
     } 
     result.push(resultObj); 
    } 
    return result; 
} 

//$(document).ready(function() { 
// 'use strict'; 

    var data = {testFieldNames: ["testNumber", "testName", "testDate1", "testDate2"], 
       testFieldValues: [ 
        "4|Sam|2012-02-10T00:00Z|2012-02-10T00:00Z", 
        "0|Wallace|1970-01-01T00:00Z|2012-02-10T00:00Z" 
       ] 
       }; 

    console.log(mapData(data)); 
//}); 
    /*Expected Output [{"testNumber" : "4", "testName" : "Sam", "testDate1" : "2012-02-10T00:00Z", "testDate2" : "2012-02-10T00:00Z"},{"testNumber" : "0", "testName" : "Wallace", "testDate1" : "1970-01-01T00:00Z", "testDate2" : "2012-02-10T00:00Z"}]*/ 

命中F12看到控制檯或Firefox或者瓢蟲在Opera打開Firebug等

相關問題