Как передать sh значений объекту изнутри функции карты при выполнении условия? - PullRequest
1 голос
/ 05 августа 2020

Как мы можем передать sh значений объекту изнутри функции карты и вернуть этот единственный объект. У меня есть условие сравнения строк внутри функции карты. Я пробовал использовать Object.assign, но он возвращает массив с несколькими объектами внутри этого массива. Вместо этого множественного объекта я ожидаю один объект внутри массива.

Функция карты

let arrayObj = arrayToTraverse.map(function(item) {
    var myObj = {};
    if(item.inputvalue === 'Name'){
        Object.assign(myObj, {name: item.value});
    } else if (item.inputvalue === 'Email'){
        Object.assign(organizerInfo, {email: item.value});
    } else if (item.inputvalue === 'Company'){
        Object.assign(organizerInfo, {company: item.value});
    }
    return myObj;
});
console.log("The array object is", arrayObj)

Это возвращает массив объектов следующим образом

[
  {
    "name": "Tom"
  },
  {
    "email": "tom@abc.com"
  },
  {
    "company": "ABC"
  }
]

Но ожидаемый массив

[
  {
    "name": "Tom",
    "email": "tom@abc.com",
    "company": "ABC"
  }
]

// or
[
   "returned": {
      "name": "Tom",
      "email": "tom@abc.com",
      "company": "ABC"
   }
]

Пример arrayToTraverse можно рассматривать как следующий

  [
    {
      "id": "1",
      "inputvalue": "Name",
      "value": "Tom",
      "type": "Short Text"
    },
    {
      "id": "2",
      "inputvalue": "Email",
      "value": "tom@abc.com",
      "type": "Email ID"
    },
    {
      "id": "3",
      "inputvalue": "Company",
      "value": "Google",
      "type": "Long Text"
    }
  ]

1 Ответ

1 голос
/ 05 августа 2020

Проще говоря, вы пытаетесь reduce преобразовать массив в один объект, а не map один массив в другой.

var arrayToTraverse = [
   {inputvalue:"Name",value:"Tom"},
   {inputvalue:"Email",value:"tom@abc.com"},
   {inputvalue:"Company",value:"ABC"},
   {inputvalue:"Foo",value:"Bar"} // wont show up
];

var valuesRequired = ["Name","Email","Company"];

var result = arrayToTraverse.reduce( (acc, item) => {
    if(valuesRequired.includes(item.inputvalue))
      acc[item.inputvalue.toLowerCase()] = item.value;
    return acc;
}, {});

console.log(result);

Изменить: добавлен поисковый массив для обязательных полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...