Javascript преобразовать целочисленное свойство в строковое свойство для всех объектов в массиве

#javascript #arrays #string

#javascript #массивы #строка

Вопрос:

Уважаемые разработчики Javascript, как мне изменить значение свойства с Int / Double на String для всех объектов в массиве?

 Original Array

data = [
  Object {
    "id": 2138,
    "name": "Steve",
    "email": "steve.adams@gmail.com",
    "phone": 8745235698,
    "addressLine1": "Some Nice Address",
    "shopId": 115,
  },
  Object {
    "id": 2139,
    "name": "Chris",
    "email": "chris.austins@gmail.com",
    "phone": 9865345689,
    "addressLine1": "Vhjhjg",
    "shopId": 115,
  },
  Object {
    "id": 2140,
    "name": "Melinda",
    "email": "melinda@velvetjewels.com",
    "phone": 9867626833,
    "addressLine1": "California",
    "shopId": 115,
  }
]
  

У меня есть библиотека Multipicker, для которой id свойство должно быть строковым значением, когда я передаю ему массив. Когда идентификатор не является строкой, я не вижу никаких данных в библиотеке для выбора.

Я пытался использовать map() функцию, но не смог сохранить объект. Я получил только массив идентификаторов строк.

 //Tried Map Method
let customers = data.map((item) => (item.id = String(item.id)));
console.log("fixed array", customers);

result ["2138","2139","2140"]
  

Я также хочу сохранить исходный массив, поэтому, если возможно, пожалуйста, предоставьте решение с использованием map() функции, поскольку она возвращает новый массив без изменения исходного. Или любой другой метод, который не изменяет исходный массив

 //Expected Result
//id's changed to String

customers = [
  Object {
    "id": "2138",
    "name": "Steve",
    "email": "steve.adams@gmail.com",
    "phone": 8745235698,
    "addressLine1": "Some Nice Address",
    "shopId": 115,
  },
  Object {
    "id": "2139",
    "name": "Chris",
    "email": "chris.austins@gmail.com",
    "phone": 9865345689,
    "addressLine1": "Vhjhjg",
    "shopId": 115,
  },
  Object {
    "id": "2140",
    "name": "Melinda",
    "email": "melinda@velvetjewels.com",
    "phone": 9867626833,
    "addressLine1": "California",
    "shopId": 115,
  }
]
  

Комментарии:

1. Просто перебирайте исходный массив и устанавливайте thing.id = thing.id.toString() . Вам не нужно сопоставлять, если вы хотите изменить оригинал. Просто выполните цикл.

2. data.forEach(it => it.id = it.id.toString())

Ответ №1:

Если вы используете карту, вы должны вернуть измененный объект :

 let customers = data.map( item => {
     item.id = String(item.id);
     return item;
});
  

Но вам не нужна карта. Вы можете просто выполнить итерацию таким образом :

 data.forEach(item => item.id = String(item.id)) // or ""   item.id, or item.id.toString()