1

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/Dwfg​​6/1/

4

4 に答える 4

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);

デモ。(注: 古いブラウザーでは、代わりに jQuery.map メソッドを使用できます。)

于 2012-10-11T11:20:45.983 に答える
0

You were close...

http://jsfiddle.net/Dwfg6/4/

于 2012-10-11T11:24:06.263 に答える
0

私の答え:

フィドル

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"}]*/

Chrome で F12 を押してコンソールを表示するか、FireFox で FireBug を開くか、Opera で LadyBug などを開きます。

于 2012-10-11T12:16:17.177 に答える
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/

于 2012-10-11T11:36:48.940 に答える