javascript - 为什么当我返回数组而不是回调函数中的某些原语时,map 的工作方式有所不同?

标签 javascript angular dictionary

脚本

var companies=[
{name:'Vicky',category:'Devdas',start:1993,end:2090},
{name:'Vikrant',category:'Devdas',start:1994,end:2019},
{name:'Akriti',category:'mental',start:1991,end:2021},
{name:'Dummy',category:'dummyCategory',start:1995,end:2018},
{name:'Dummy 1',category:'dummyCategory',start:1993,end:2029}
];
var mappingComp=companies.map(company=>{company.start+10;return company});
console.log("mapped company function");
console.log(mappingComp.forEach(company=>console.log(company))); 

在上面的代码片段中,公司数组的起始字段没有变化。为什么?

如果我执行下面的操作,我会从公司数组中获取起始字段的修改值。

var mappingComp=companies.map(company=>company.start+10);

最佳答案

您没有将 company.start+10 的结果分配给任何东西 - 它只是一个孤立的表达式。

var mappingComp = companies.map(company => {
  company.start + 10;
  return company
});

就像

var mappingComp = companies.map(company => {
  33;
  return company
});

表达式被计算为一个值,然后被丢弃。如果您想将 10 添加到 company.start 中,请使用 +==:

var companies=[
{name:'Vicky',category:'Devdas',start:1993,end:2090},
{name:'Vikrant',category:'Devdas',start:1994,end:2019},
{name:'Akriti',category:'mental',start:1991,end:2021},
{name:'Dummy',category:'dummyCategory',start:1995,end:2018},
{name:'Dummy 1',category:'dummyCategory',start:1993,end:2029}
];
var mappingComp = companies.map(company => {
  company.start += 10;
  return company;
});
console.log(mappingComp);

但这会改变原始数组,这在使用 map 时(通常)不是一个好主意。如果您不想更改原始数组,请映射到新对象:

var companies=[
{name:'Vicky',category:'Devdas',start:1993,end:2090},
{name:'Vikrant',category:'Devdas',start:1994,end:2019},
{name:'Akriti',category:'mental',start:1991,end:2021},
{name:'Dummy',category:'dummyCategory',start:1995,end:2018},
{name:'Dummy 1',category:'dummyCategory',start:1993,end:2029}
];
var mappingComp = companies.map(({ start, ...rest }) => ({
  start: start + 10,
  ...rest
}));
console.log(mappingComp);

关于javascript - 为什么当我返回数组而不是回调函数中的某些原语时,map 的工作方式有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51035151/

相关文章:

regex - Primeng KeyFilter 运行不正常

python - 无法从 Python 函数返回列表元素

angular - Manifest.json 未复制到 dist

javascript - 如何使用 JQuery 控制 CSS Sprite

javascript - 如何比较两个数组并通过完整迭代删除重复对象

javascript - 使用 document.write 将外部 JavaScript 文件加载到 AngularJS 应用程序中

angular - 如何显示跟随角色的文字?

python - 字典中的 "TypeError: ' unicode ' object does not support item assignment"

java - 将日期选择器值放入 java 中的列表中

javascript - 如何将 css 属性添加到 Canvas