在array.map()方法的参数中,方括号的作用是什么?

3

不确定在 .map(([key, value]) => [key, value * 2]) 中发生了什么,我大致了解参数中方括号的作用。但是有人可以澄清语法规则或者解释一下吗?

以下是我对代码如何工作的理解:

  1. Object.entries 将对象 prices 转换为数组,返回类似于 [[banana, 1], [orange, 2], [meat, 4]] 的内容。
  2. map 是一个数组方法,该函数将每个条目的价格加倍。
  3. 然后将更改重新转换回对象。

如果 map 遍历项目,那么写成 .map((item) => [item[0], item[1] * 2]) 是否更合适呢?

正在学习 javascript.info 的课程。

let prices = {
  banana: 1,
  orange: 2,
  meat: 4,
};

let doublePrices = Object.fromEntries(
  // convert to array, map, and then fromEntries gives back the object
  Object.entries(prices).map(([key, value]) => [key, value * 2])
);

console.log(doublePrices.meat); // 8


5
这叫做“数组解构”,最终结果类似于.map((item) => [item[0], item[1] * 2]) - Ori Drori
1
正如@OriDrori所提到的那样,这本质上是相同的事情。方括号允许您在参数中直接引用数组内的元素。 - Jacob Penney
1
这是否回答了您的问题?函数定义中括号括住的参数 - Heretic Monkey
1个回答

2

在您所询问的代码片段中,左侧与右侧非常不同。让我们来分解一下:

.map(([key, value]) => [key, value * 2])

首先,map 的参数是一个函数。这里的函数本质上是在执行以下操作:
(entry) => { 
  const key = entry[0];
  const value = entry[1];
  const modified_entry = [ key, value * 2 ];
  return modified_entry; 
}

更简洁的写法是:
(entry) => [ entry[0], entry[1] * 2 ]

由于函数主体周围没有花括号,因此它使用该值作为返回值,这与以前的代码相同。

现在,您所询问的代码并未使用单个变量作为函数的输入参数。它是一个单一参数,但通过使用称为“解构”或“析构”的东西来设置2个变量。这是Javascript中的一种功能,可以让您以简单的方式将对象拆分为多个变量。例如,请看这个示例:

var entry = [ 'meat', 1]
var [ item, price ] = entry
// now item is 'meat', and price is 1, which is nicer than having to do this:
item = entry[0]
price = entry[1]

回到你的代码,他们将entry表示为[key,value],以便可以轻松地在函数中使用,在=>的右侧我们有返回值,它是一个新数组,其中价格加倍。

请记住,在左侧,我们正在将对象分解为新变量,这些变量被赋予值,而在右侧,我们正在创建一个新的Array对象,该对象被返回。这可能会有点令人困惑,因为它们都具有相同的形式,看起来像方括号中的数组。

还要注意,解构也适用于对象和数组,因此这也是有效的代码:

var obj = { a:1, b:2, c:3 }
var { a, c } = obj
console.log(a,c)  // will print "1 3"

将对象进行解构,可以只取出你需要的部分,并创建以键名命名的变量。请注意,我们没有请求 b,因此没有 b 变量 - 它被忽略了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接