使用return时映射未定义

时间:2016-04-28 12:16:16

标签: javascript typescript

我遇到了一个我无法立即解释并希望解决的问题。如果我写下面的代码

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

json.metadata中每个元素的输出都是'undefined'。

如果,我写下面的内容(对map函数的使用不好,我知道我可以在这里写一个forEach,结果是一样的)

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

现在我得到了正确的结果,而不是未定义的。

为什么对this.metadata(这是一个Metadatum [])的赋值是未定义的?

2 个答案:

答案 0 :(得分: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 lambda的一些语法如下:

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

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

singleParam => {statements}

// 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

答案 1 :(得分: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;
});