2017-03-10 128 views
1

使用JavaScript應用程序,需要幫助根據從ajax調用收到的響應創建一個新對象。如何從Javascript中的現有對象創建新對象?

接收到的輸出對象的數組,示例如下格式:

{ 
    "items": [ 
    { 
     "id": "02egnc0eo7qk53e9nh7igq6d48", 
     "summary": "Learn to swim", 
     "start": { 
     "dateTime": "2017-03-04T19:00:00+05:30" 
     } 
    }   

] 
} 

然而,我的組件需要JS對象的格式如下:

{ 
id: "e1", 
title: "Express", 
start: "Jan 13, 2010", 
description: "Jan 13, 2010" 
} 

是下面的方法是正確的,請建議更好的方法,如果有的話

var content = { 
 
    "items": [{ 
 
     "id": "02egnc0eo7qk53e9nh7igq6d48", 
 
     "summary": "Learn to code", 
 
     "start": { 
 
      "dateTime": "2017-03-04T19:00:00+05:30" 
 
     } 
 
     } 
 
     } 
 
    }; 
 
    var gcalEvents = {}; 
 
    var jsonObj = { 
 
     "id": "e1", 
 
     "title": "Oracle Application Express", 
 
     "start": "Jan 13, 2010", 
 
     "description": "Jan 13, 2010" 
 
    }; 
 

 
    console.log(content.items.length); 
 
    for (var index = 0; index < content.items.length; index++) { 
 
     var obj = content.items; 
 
     console.log(obj); 
 

 
     jsonObj.id = obj[index]["id"]; 
 
     jsonObj.title = obj[index].summary; 
 
     jsonObj.start = obj[index].start.dateTime; 
 
     jsonObj.description = ""; 
 
     console.log(jsonObj); 
 
     gcalEvents[index] = jsonObj; 
 
    } 
 
    console.log(gcalEvents);

+4

JSON是用於數據交換的*文本記法*。 (HTTP [(更多。)]://計算器。com/a/2904181/157247)如果你正在處理JavaScript源代碼,而不是處理*字符串*,那麼你不會處理JSON。當你做上述事情時,你只是在處理對象,而不是JSON。 –

+0

你的輸入是一個包含兩個對象的數組。您顯示的所需輸出是單個對象。你的意思是你需要一系列的嗎? –

+2

你如何定義標題?應該輸出什麼?你如何定義ID?你如何定義描述?所有對象都是一樣的? – Weedoze

回答

2

你可以採取一個更實用的方法有以下:

var parsed = content.items.map(function (item) { 
    return { 
     id: item.id, 
     title: item.summary, 
     start: item.start.dateTime, 
     description: item.start.dateTime 
    } 
}) 

這將使用歸因與數組遍歷數組的每個項目地圖和方法返回一個新的解析對象數組。請參閱fuller example

0

下面是固定代碼: 一個錯誤是當您列出內容項時,最後缺少「]」。 第二個是你試圖給一個未定義的對象賦值,你首先需要定義這個對象,例如:jsonObj = {};,然後進行賦值。 我更喜歡一次性完成對象的定義和賦值。

爲了使輸出爲一個數組,你只需要定義保藏中心作爲一個數組,而不是我的對象如:var gcalEvents = []

var content = { 
 
    "items": [ 
 
    { 
 
     "id": "02egnc0eo7qk53e9nh7igq6d48", 
 
     "summary": "Learn to code", 
 
     "start": { 
 
     "dateTime": "2017-03-04T19:00:00+05:30" 
 
     } 
 
    }, 
 
    { 
 
     "id": "nj4h567r617n4vd4kq98qfjrek", 
 
     "summary": "Modern Data Architectures for Business Insights at Scale Confirmation", 
 
     "start": { 
 
     "dateTime": "2017-03-07T11:30:00+05:30" 
 
     } 
 
    } 
 
    ] 
 
}; 
 
       var gcalEvents = []; 
 
       var jsonObj = { 
 
        "id": "e1", 
 
        "title": "Oracle Application Express", 
 
        "start": "Jan 13, 2010", 
 
        "description": "Jan 13, 2010" 
 
       }; 
 
       
 
       //console.log(content.items.length); 
 
       for(var index=0; index < content.items.length; index++){      
 
        var obj = content.items[index]; 
 
        //console.log(obj); 
 
        
 
        jsonObj = { 
 
         'id': obj["id"], 
 
         'title': obj.summary, 
 
         'start': obj.start.dateTime, 
 
         'description': "" 
 
        } 
 
        //console.log(jsonObj); 
 
        gcalEvents[index] = jsonObj; 
 
       } 
 
       console.log(gcalEvents);

+1

你也想解釋一下你修好了什麼。如果你想要它(至少看起來像一個)很好的答案,加上修復縮進。 – dfsq

+0

這也不會產生一個數組。 OP說(在評論中)結果應該是一個數組。 –

1
var jsonObj=[]; 
for (var index = 0; index < content.items.length; index++) { 
    var obj = {}; 
    console.log(obj); 
    obj["id"]=content.items[index].id; 
    obj["title"]=content.items[index].summary; 
    obj["start"]=content.items[index].start.dateTime; 
    obj["description"]=""; 
    jsonObj.push(obj); 
    console.log(jsonObj); 
    //gcalEvents[index] = jsonObj; 
} 

這會給你jsonObj作爲你想要的json對象。

希望這有助於:)

1

我有另一種方法來轉換此內容。 使用Underscore.js使代碼更具可讀性。 這裏是例子:

var content = { 
 
    "items": [{ 
 
     "id": "02egnc0eo7qk53e9nh7igq6d48", 
 
     "summary": "Learn to code", 
 
     "start": { 
 
      "dateTime": "2017-03-04T19:00:00+05:30" 
 
     } 
 
    }, { 
 
     "id": "nj4h567r617n4vd4kq98qfjrek", 
 
     "summary": "Modern Data Architectures for Business Insights at Scale Confirmation", 
 
     "start": { 
 
      "dateTime": "2017-03-07T11:30:00+05:30" 
 
     } 
 
    }] 
 
}; 
 
var result = _.map(content.items, function(item) { 
 
    return { 
 
     id: item.id, 
 
     title: item.summary, 
 
     start: item.start.dateTime, 
 
     description: "" 
 
    }; 
 
}); 
 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

結果如下:

[ 
    { 
    "id": "02egnc0eo7qk53e9nh7igq6d48", 
    "title": "Learn to code", 
    "start": "2017-03-04T19:00:00+05:30", 
    "description": "" 
    }, 
    { 
    "id": "nj4h567r617n4vd4kq98qfjrek", 
    "title": "Modern Data Architectures for Business Insights at Scale Confirmation", 
    "start": "2017-03-07T11:30:00+05:30", 
    "description": "" 
    } 
] 
1

在覈心,你正試圖從一組數據到另一個的 '地圖'。 Javascript的數組映射函數應該足夠了。例如。

var content = { 
    "items": [{ 
    "id": "02egnc0eo7qk53e9nh7igq6d48", 
    "summary": "Learn to code", 
    "start": { 
     "dateTime": "2017-03-04T19:00:00+05:30" 
    } 
    }] 
}; 

var results = content.items.map(function (item) { 
    return { 
    id: item.id, 
    title: item.summary, 
    start: item.start.dateTime, 
    description: "" 
    }; 
}); 

console.log(results); 
相關問題