Могу ли я добавить определенные данные в атрибут объекта? - PullRequest
0 голосов
/ 29 октября 2019

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

let cars= [ 
  {orderno: "5766302385925", make: "Alfa", dealership: "NA"},
  {orderno: "4663873261390", make: "Merc", dealership: "NA"},
  {orderno: "8458821291579" , make: "BMW", dealership: "EU"},
  {orderno: "3376768687480", make: "Ford", dealership: "NA"},
  {orderno: "5186132840921", make: "Buick", dealership: "EU"},
];

function addOrderDot() {
    for (var i=0; i<cars.length; i++) {
    cars.orderno[i].splice(2,0,'.')
    cars.orderno[i].splice(3,0,'.')
    cars.orderno[i].splice(6,0,'.')
    cars.orderno[i].splice(11,0,'.')
    } 
}

Желаемый массив после функции:

let cars= [ 
  {orderno: "576.6.302.38592.5", make: "Alfa", dealership: "NA"},
  {orderno: "466.3.873.26139.0", make: "Merc", dealership: "NA"},
  {orderno: "845.8.821.29157.9" , make: "BMW", dealership: "EU"},
  {orderno: "337.6.768.68748.0", make: "Ford", dealership: "NA"},
  {orderno: "518.6.132.84092.1", make: "Buick", dealership: "EU"},
];

Ответы [ 4 ]

0 голосов
/ 29 октября 2019

Более элегантным решением было бы использовать простое регулярное выражение для замены каждой строки:

let cars= [ 
  {orderno: "5766302385925", make: "Alfa", dealership: "NA"},
  {orderno: "4663873261390", make: "Merc", dealership: "NA"},
  {orderno: "8458821291579" , make: "BMW", dealership: "EU"},
  {orderno: "3376768687480", make: "Ford", dealership: "NA"},
  {orderno: "5186132840921", make: "Buick", dealership: "EU"},
];

function addOrderDot() {
    cars.forEach(car => {
       car.orderno = car.orderno.replace(
      /^(.{3})(.{1})(.{3})(.{5})(.{1})$/,
      `$1.$2.$3.$4.$5`
    )
    })
}

Объяснение: Мы перебираем элементы массива cars и логически группируем цифры orderno в 5 групп.

В regExp ^ означает начало строки, () a определяет логическую группу, которую мы можем позже использовать в качестве переменной,. {Number} количество символов и $ конец строки. Таким образом, наше регулярное выражение разделяет группу из 3 символов как $ 1, группу из 1 символа как $ 2 и так далее. Затем мы просто заменяем исходную строку «сшитыми» логическими группами.

Поначалу RegExp может показаться немного запутанным, но может быть отличным инструментом при работе со строками и очевидными шаблонами.

0 голосов
/ 29 октября 2019

Один из подходов заключается в использовании map () и slice () .

let cars= [ 
  {orderno: "5766302385925", make: "Alfa", dealership: "NA"},
  {orderno: "4663873261390", make: "Merc", dealership: "NA"},
  {orderno: "8458821291579", make: "BMW", dealership: "EU"},
  {orderno: "3376768687480", make: "Ford", dealership: "NA"},
  {orderno: "5186132840921", make: "Buick", dealership: "EU"},
];

function addOrderDot(cars) {
  return cars.map(car => ({
    ...car,
    orderno: car.orderno.slice(0, 3) + '.' +
      car.orderno.slice(3, 4) + '.' +
      car.orderno.slice(4, 7) + '.' +
      car.orderno.slice(7, 12) + '.' +
      car.orderno.slice(12, 13)
  }));
}

let result = addOrderDot(cars);

console.log(result);
0 голосов
/ 29 октября 2019

Вы хотите изменить свой массив на месте, поэтому вам нужно

  1. перебрать все элементы массива
  2. принять значение свойства orderno элемента
  3. изменить значение
  4. обновить свойство orderno элемента в массиве

(1) выполнить итерацию по всем элементам массива

Существуют различные возможности, самый простой метод - это цикл с for, так же, как вы уже пытались

 for (let i=0; i<cars.length; i++) {
 } 

(2) вы обращаетесь к элементу массива, используя cars[i],и получить доступ к свойству errorno с помощью cars[i].orderno

 let orn = cars[i].orderno;

(3) изменить его значение

orn = orn.slice(0,3)+'.'+orn.slice(3,4);

(4) напрямую присвоить новое значение в массиве

cars[i].orderno = orn;

Итак, собираем все кусочки

 for (var i=0; i<cars.length; i++) {
    let orn = cars[i].orderno;
    orn = orn.slice(0,2)+'.'+orn.slice(2,4) ;
    cars[i].orderno = orn;
 }
0 голосов
/ 29 октября 2019

Прежде всего вы можете использовать карту для преобразования массива:

let cars= [ 
  {orderno: "5766302385925", make: "Alfa", dealership: "NA"},
  {orderno: "4663873261390", make: "Merc", dealership: "NA"},
  {orderno: "8458821291579" , make: "BMW", dealership: "EU"},
  {orderno: "3376768687480", make: "Ford", dealership: "NA"},
  {orderno: "5186132840921", make: "Buick", dealership: "EU"},
];

console.log(cars.map(car => {car.orderno = "test"; return car}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...