Почему карта работает иначе, когда я возвращаю массив вместо некоторого примитива в функции обратного вызова? - PullRequest
0 голосов
/ 26 июня 2018

Сценарий

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);

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

company.start + 10 - простое выражение.Это не оператор присваивания, который вы ожидаете.И вы возвращаете исходную компанию массива, поэтому имеет смысл, что она будет возвращена без изменений.

, когда вы попробовали однострочную жирную стрелку с картой.В результате вы создали еще один совершенно другой массив мутированных значений.Созданный массив был заполнен значениями (company.start +10) и возвращен.Примечание. Это фактически не изменило исходный массив, т. Е. Компанию.

Читайте о жирных стрелках, картах, фильтрах.

0 голосов
/ 26 июня 2018

Вы не присваиваете результат 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.Если вы не хотите изменять исходный массив, 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...