2016-04-28 73 views
0

我遇到了一個我不能立即解釋並想要解決的問題。如果我編寫以下代碼使用返回時映射未定義

this.metadata = json.metadata.map((x) => {return new Metadatum(x);}); 
console.log(this.metadata[0].value); 

對於json.metadata中的每個元素,輸出都是'未定義的'。

如果,我寫了下面的(不好用的地圖功能的,我知道我可以只寫一個foreach這裏,結果都是一樣的)

json.metadata.map(x => this.metadata.push(new Metadatum(x))); 
console.log(this.metadata[0].value); 

現在我得到正確的結果,而不是不確定的。

爲什麼對this.metadata(它是一個Metadatum [])的賦值沒有定義?

+0

難道是'this.metadata'之前已經具有有效的值,你的第二個方式不工作,要麼,但你看不到它,因爲你不清除由先前的元素在推新的之前? – CherryDT

+0

@CherryDT this.metadata基本上被聲明爲一個數組。 (元數據:Metadatum []) –

回答

0

你可以使用任何的下列選項中使用.map

var data = [1, 2,3,4,5,6,7]; 
function Metadatum (x) { 
    this.value = x; 
} 

let metadata = data.map((x) => { return new Metadatum(x); }); 
let metadata1 = data.map(x => new Metadatum(x)); 
console.log(metadata[0].value); 
console.log(metadata1[0].value); 

一些語法ES6拉姆達的是如下:

(param1, param2, …, paramN) => { statements } 
(param1, param2, …, paramN) => expression 
    // equivalent to: => { return expression; } 

// Parentheses are optional when there's only one parameter: 
(singleParam) => { statements } 

singleParam => {語句}

// A function with no parameters requires parentheses: 
() => { statements } 

有關箭頭函數的詳細語法,請參閱:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

編輯:這裏是工作示例JSBin鏈接:https://jsbin.com/huzuyo/1/edit?html,js,console

+0

我知道這一點,但是當我使用該語法時,該值是未定義的。我可以直接將它推到數組,並且它不是undefined –

+0

你可以創建一個JSBin,codepen或者plunkr來顯示它嗎?我編輯了我的答案並添加了一個JSBin鏈接 –

0

你應該檢查你的數據結構; .map獲取一個數組,然後返回一個新數組。 結帳這個例子:

var kvArray = [ 
    {key:1, value:10}, 
    {key:2, value:20}, 
    {key:3, value: 30} 
]; 

var reformattedArray = kvArray.map(function(obj){ 
    var rObj = {}; 
    rObj[obj.key] = obj.value; 
    return rObj; 
});