const array1 = [1, 4, 9, 16];
// Pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1);
// Expected output: Array [2, 8, 18, 32]
上面的地图方法中的x是什么?
当我开始学习编码时,这是我试图理解数组方法语法时必须与之抗衡的单一最大的头刮擦器。
上面示例中的x x被称为“元素” - 在数组中处理的当前元素。
那么,什么是元素?为什么它表示为X?为什么在其他方法用法的其他示例中,该位置被其他字母(或单词?!)占据?
MDN文档为Array.prototype.map()提供的定义并不是说明“元素”是什么...这是他们的定义:
#element:
#The current element being processed in the array.
我还没有意识到MDN是如此重言式...
现在,对于经验丰富的开发人员来说,这个定义可能非常清楚,他们只需要快速刷新他们所看的东西。对于从编码旅程开始的人们通常不是这种情况。
简单地说(也许不是特别准确),“元素”的字母或单词代表该方法用于迭代的特定位置对象/变量。
在地图函数中,我们给该函数一个数组来“映射”,这意味着我们希望该方法通过该数组,一对一的每个实例/变量(re:element),然后进行操作有东西。为了使地图函数通过数组中的每个项目,它需要能够“保留”该特定实例(或元素),因为它执行了我们希望它为代码执行的地图作业。
让我们回到我们的原始地图示例:
// we have array1 that we want to perform a map function on.
const array1 = [1, 4, 9, 16];
// we write the map function:
const map1 = array1.map(x => x * 2);
注意“ x” - 作为映射函数从字面上通过array1进行“映射”,一对一通过数组,我们将“ x”定义为元素是第一个数组位置,值为1
然后“ x”是第二个数组位置,值为4,并保持到达数组的末端直至
让我们更详细地看到:
const array1 = [1, 4, 9, 16];
const map1 = array1.map(x => x * 2)
Array1[0] : 1 => 1 * 2 = map1[0] = 2
Array1[1] : 4 => 4 * 2 = map1[1] = 8
和
console.log(map1);
// Expected output: Array [2, 8, 18, 32]
但是猜怎么着?您可以为元素提供所需的任何值!您可以将元素命名为“ Isortamakessensenow” *,它仍然可以使用! (在Replit上自己尝试一下)
const map1 = array1.map(itSortaMakesSenseNow => itSortaMakesSenseNow * 2)
*nb:不建议这样做。
在Ruby语法中,同一件事是正确的:
def map_through_array
array = [1,2,3]
array.map { |n| n * 2 }
end
# output: [2, 4, 6]
您可以代替n数字
def map_through_array
array = [1,2,3]
array.map { |number| number * 2 }
end
# output: [2, 4, 6]
因此,您在命名元素的方式方面具有相当的灵活性。当然,对于我们可以使用的数组方法(即array.find(),array.filter()),您可以随心所欲地命名元素。
也就是说,您确实想保持代码读取器友好,当您看到编写良好的代码时,您会发现这些元素通常是单个字母(最小化代码中的位量),并且相对较小该功能的直观。在上面的示例中,由于我们正在绘制一系列数字来执行数学函数,因此使用元素名称或简称n数字是有道理的。最好不要使用诸如Itsortamakessenow之类的长字符串。我们可能会后来后悔。
此外,还有一些已经存在的约定被认为是标准,通常应由编码人员尊重。
一个很好的例子是,在Rails数据库上为Ruby构建迁移文件时:
如果您导航到Rails迁移文件,则会看到类似的东西:
class CreateExample < ActiveRecord::Migration[6.1]
def change
create_table :examples do |t|
t.string :title
t.string :example
t.integer :rating
t.timestamps
end
end
end
您表面上可以更改| T |成为| q |以及以下属性和列
q.string : title
q.string : review
仍然可以正确构建数据库列,但这不是标准惯例。
愉快的编码!