假设我想转的array.map迭代返回一个对象数组
let originalArray = [a,b,c]
阵列到这种格式的一个阵列:
[{0:a},{1:b},{2:c}]
我使用映射函数到originalArray遍历这样
originalArray.map((val, i) => {i:val})
但是它返回所有未定义的值。我的问题是我如何使用地图功能来达到预期的效果?
假设我想转的array.map迭代返回一个对象数组
let originalArray = [a,b,c]
阵列到这种格式的一个阵列:
[{0:a},{1:b},{2:c}]
我使用映射函数到originalArray遍历这样
originalArray.map((val, i) => {i:val})
但是它返回所有未定义的值。我的问题是我如何使用地图功能来达到预期的效果?
您需要使用[]
表示法来评估表达式并使用它下面的值。同样用()
括号包装返回的对象,如果没有这个,编译器就会知道对象的开始{
,因为箭头函数体开始时会出现错误的结果。
let originalArray = ['a','b','c'];
let mappedArray = originalArray.map((item, index) => ({[index]: item}));
console.log(mappedArray);
你的代码片段是这样的一个,而如果你不明确未定义默认返回返回任何东西,它。
let originalArray = ['a','b','c'];
let mappedArray = originalArray.map((item, index) => {
index: item;
return undefined;
});
console.log(mappedArray);
你的箭头功能语法不正确,因为在这种情况下,{
和}
被解释为块分隔符:
(val, i) => {i:val} // Here '{' and '}' are a block delimiters.
你需要,至少,请将其在括号之间强制它被解释为对象表达式:
(val, i) => ({[i]:val}) // This works.
// Also notice the '[' and ']' surrounding "i" meaning that the
// value of i should be used as key instead of actual "i".
想想这个:
(val, i) => {i, val}
...什么是应该回来? {i:<i_value>, val:<val_value>}
或不确定的(因为i, val
评估为VAL值,但封闭在块分隔符,你需要明确的用户“回归”声明:
$ node
> let f = (x)=>{x+1}
undefined
> f(3)
undefined
> let f = (x)=>{return x+1}
undefined
> f(3)
4
或者你可以做这样的事情,但是,在这种情况下,利用箭头功能会变得毫无意义IMHO:
(val, i) => {return {i:val}}
据解释'{}'作为块不是对象包裹大括号中的括号(这只是的事情停止该一个。加工) – evolutionxbox