Отображение массива значений в массив объектов - PullRequest
0 голосов
/ 10 апреля 2020

Итак, у меня есть проблема, которая требует от меня сопоставления массива имен с объектом со свойством name. Следующий код находится под вопросом.

this.planNames.map((name,index) => {
     this.tempdata[index].name = name;
        }),

Вот пример массива.

tempdata: any = [
    {
      name: 'Mix and match',
      title: 'Single-line plans for voice messaging and data.',
      desc:
        'A great plan option for bussinesses that want each line on its own plan. These plans have no maximum line caps.',
    },
    {
      name: 'Flexible',
      title: 'Multi-line plans for when one size does not fit all.',
      desc:
        'A great plan option for up to 10 phones with different unlimited data needs',
    }

, любая идея с использованием функций со стрелками была бы хороша, так как я узнаю больше об этих моих самостоятельно.

Ответы [ 3 ]

0 голосов
/ 10 апреля 2020

[].map возвращает новый массив, содержащий результат каждого из исходных элементов массива, переданных через функцию обратного вызова. Таким образом, вам не нужно заранее создавать временный массив - результат функции карты будет содержать то, что вам нужно.

const newTempData = this.planNames.map((name, index) => {
   return { ...tempdata[i], name }
});

Обычно вы не изменяете данные в функции .map. Если вы заинтересованы в изменении исходной структуры данных, tempdata, вам следует просто использовать стандарт [].forEach.

tempdata.forEach((data, index) => {
    data.name = this.planNames[index];
});
0 голосов
/ 10 апреля 2020

Должны быть некоторые изменения в вашей функции карты.

this.planNames.map((item,index) => {
   this.tempdata[index].name = item.name;
});
console.log(this.tempData)
0 голосов
/ 10 апреля 2020

Функция map предназначена только для замены данных другими массивами.
Если вы хотите обновить другие данные массива, вам следует использовать for l oop:

const tempdata = [
    {
      name: 'Mix and match',
      title: 'Single-line plans for voice messaging and data.',
      desc:
        'A great plan option for bussinesses that want each line on its own plan. These plans have no maximum line caps.',
    },
    {
      name: 'Flexible',
      title: 'Multi-line plans for when one size does not fit all.',
      desc:
        'A great plan option for up to 10 phones with different unlimited data needs',
    }
];

const planNames = ['a', 'b'];

for(let i = 0; i < planNames.length; i++) {
  tempdata[i].name = planNames[i];
}

console.log(tempdata);
...