Реагировать — Разделить атрибут на два

#reactjs

Вопрос:

У меня есть этот 2d массив,

 let records = [{firstname_lastname: 'aaa_bbb', age=11},{firstname_lastname:'ccc_ddd', age:22}]
 

Мне нужно разбить firstname_lastname на два отдельных атрибута:

 [{firstname:'aaa', lastname:'bbb', age:11},{firstname:'ccc', lastname:'ddd', age:22}]
 

Я сделал это, используя карту и разделение

 let recordsArr =  records.map((item)=>({
    'firstname':item['firstname_lastname'].split('_')[0],
    'lastname':item['firstname_lastname'].split('_')[1],
    'age':item['age']})
 

Мне было интересно, есть ли лучший/более быстрый способ сделать это?

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

1. Не лучше и не быстрее, но вы могли бы сделать let newItem = {age: item.age}; [newItem.firstname, newItem.lastname] = item.firstname_lastname.split('_'); return newItem; так, чтобы не звонить .split дважды. Я думаю, что одна вещь, которую можно объективно улучшить, — это использовать точечную нотацию вместо скобочной для доступа к свойствам везде, где это возможно.

2. Вы делаете это правильно. Карта предназначена для преобразований списка n -> n, что именно то, чего вы пытаетесь достичь. Как говорит @FelixKling, обозначение доступа к объекту в скобках должно быть точечным обозначением. Если вместо этого вам нужен совет по добавлению устойчивости/обработки ошибок в эту функцию, пожалуйста, обновите свой вопрос.

Ответ №1:

Чтобы закрыть этот вопрос, я просто повторяю комментарии @Felix-kling и @windowsill. Я сопоставил записи с функцией ниже:

     function splitName(record){
        let newRecord = {age: record.age};
        [newRecord.firstname, newRecord.lastname] = record. firstname_lastname.split('_');
        return newRecord}
 

Чтобы провести сравнение, запустил начальное решение (в вопросе) вместе с вышеуказанной функцией для ~1 МЛН записей, оказалось, что производительность останется одинаковой в обоих случаях.