#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 МЛН записей, оказалось, что производительность останется одинаковой в обоих случаях.