我遇到了一个我无法立即解释并希望解决的问题。如果我写下面的代码
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 [])的赋值是未定义的?
答案 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;
});