reactjs - 使用箭头运算符的数组并尝试按插入顺序推送项目?
问题描述
basic = [['Answer', 'Votes']];
(() => props.poll.answers.map(ans => basic.push([ans.answer, ans.votes])))();
我在我的反应文件之一中有一个如上所述的句子。有人可以让我知道插入基本数组的值是什么,以什么顺序插入到 map 函数中,() 的含义是什么,如最后在 map 函数中表示的那样。basic.push([ans.answer, ans.votes]) 这里的句子是这样的,进入大部分场景它想array.push({name:value},{name,value}) 但是这里进入方括号那是什么意思。
解决方案
好吧,让我们拆分这个问题 - 本质上是说“这段代码有什么作用?” - 部分并独立回答每个问题。
首先,关于语法。有问题的代码是所谓的立即调用函数表达式,即我们定义函数(在本例中为箭头函数),然后在同一行代码中调用它。也就是说,第二行可以简化为:
props.poll.answers.map(ans => basic.push([ans.answer, ans.votes]));
即,我们删除最后一个括号(函数调用)和箭头之前的括号,以及箭头本身(这样就只剩下函数的主体)。
为了使原始代码更清晰一些,我们还可以将其重写如下:
const lambda = () => props.poll.answers.map(ans => basic.push([ans.answer, ans.votes]));
lambda();
在这里,我们将函数显式存储到变量中(这里的名称“lambda”是为了提醒我们这个函数实际上是lambda-expression),然后使用变量名称调用它。
现在,为你的问题。
“插入基本数组的值是什么?”
好吧,让我们看一下被调用的代码map
:
ans => basic.push([ans.answer, ans.votes])
在这里,我们的变量ans
来自我们要映射的数组。假设ans
是一个对象,具有属性answer
和votes
。之后,这些属性被组合成一个二元素数组,或者,如果你使用 TypeScript,你可以称它为元组(向下滚动一点看),使用数组字面量语法。这个数组,作为整体,被推入basic
。例如,如果我们有以下内容ans
:
ans = {answer: "Answer text", votes: 5};
并basic
在您的代码中创建,推送后我们有以下内容:
basic === [['Answer', 'Votes'], ['Answer text', 5]]
如您所见,将数组插入另一个数组中并没有什么害处,它们可以随意嵌套。
“……按什么顺序?”
当任何值被推入数组时,它们会完全按照它们被推入的顺序保留在这里。该map
函数还遍历保留顺序的源数组。因此,basic
数组中的元素将与answers
. 考虑以下示例:
props = {
poll: {
answers: [
{answer: 'Answer 1', votes: 1},
{answer: 'Answer 2', votes: 20},
{answer: 'Answer 1.5', votes: 2}
]
}
};
basic = [['Answer', 'Votes']];
(() => props.poll.answers.map(ans => basic.push([ans.answer, ans.votes])))();
console.log(basic);
让我们一步一步地检查它:
map
函数获取数组的第一个元素ans === {answer: 'Answer 1', votes: 1}
.- 元组由 形成
[ans.answer, ans.votes]
,即['Answer 1', 1]
。 - 元组被插入到
basic
数组中basic === [['Answer', 'Votes'], ['Answer 1', 1]]
。 - 第二个和第三个元素的处理方式相同。
您可以通过运行代码片段来检查结果 -console.log()
正是为此而引入的。
“最后在map函数中表示的()是什么意思?”
事实上,这个问题已经在这里得到了回答,但我想强调以下几点:这些括号与没有map
任何关系。让我们格式化这个表达式:
(
() => props.poll.answers.map(
ans => basic.push([ans.answer, ans.votes])
)
)();
您可以看到它map
在第一个括号内,因为它是其中定义的函数表达式的一部分。最后的括号只是调用这个表达式。
“它想进入大多数场景array.push({name:value},{name,value})
,但这里进入方括号 - 这是什么意思?”
好吧,我宁愿不谈论“大多数情况”。有很多地方数组比对象更方便(尽管在这里我可能会坚持使用对象,如果我正在设计这段代码)。关于您的问题-如前所述,这里的方括号表示数组文字,就像它们在basic
定义中一样。
推荐阅读
- android - 在Android中使用Camera拍摄的图片中显示图片
- javascript - vuedraggable 句柄属性不起作用
- ruby-on-rails - 如何自定义路线?
- flutter - tabBar 中的选项卡是否有任何属性可以更改颤动中选项卡的文本颜色?
- php - 如果为真,则显示 php 数组项
- c# - 网络核心:找不到类型或命名空间名称“GlobalFilterCollection”
- c++ - CListCtrl GetSelectionMark() 不返回正确选择的行
- java - AssertTrue.List 的用法(multipe AssertTrue)
- visual-studio - 除了内置的 VS 游标外,游标资源未正确加载
- html - 修复 h1 font-size !important 样式大小