Сокращения с несколькими операторами if для переименования некоторых значений - PullRequest
1 голос
/ 03 апреля 2020

У меня есть массив с объектами. Некоторые свойства объектов должны быть переименованы.

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

renameMinMaxActual(data) {
    const newArray = data.map(element => {
      if (element.key.includes('Min')) {
        element.key = element.key.replace('Min', '.min');
        return element;
      }
      if (element.key.includes('Max')) {
        element.key = element.key.replace('Max', '.max');
        return element;
      }
      if (element.key.includes('Actual')) {
        element.key = element.key.replace('Actual', '.actual');
        return element;
      } else {
        return element;
      }
    });
    console.log('newArray', newArray);
  }

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Создание двух массивов

fromKeys (настоящие ключи) fromKeys=['Min','Max','Actual'];

и toKeys (измененные ключи) toKeys=['.min','.max','.actual'];

Во время итерации записей, если ключ присутствует в fromKeys получает индекс и использует тот же ключ, чтобы получить значение из массива toKeys и установить его в объекте, который будет возвращен в функции map ().

let data=[{Min:0,Max:1,Actual:5,type:"A"},{Min:0,Max:1,type:"B"},{Min:0,Max:1,type:"C"},{Min:0,Actual:5,type:"D"},{Max:1,Actual:5,type:"E"}];
let fromKeys=['Min','Max','Actual'];
let toKeys=['.min','.max','.actual'];
console.log(data.map(obj => {
        let newObj={};
        for (const [key,value] of Object.entries(obj)){
             let index=fromKeys.indexOf(key);
             if(index!=-1)newObj[toKeys[index]]=value;
                 else newObj[key]=value; 
            }
        return newObj;
}));
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 03 апреля 2020

Действительно, есть много способов минимизировать код - вы упомянули «стенографию» - вот один. Мне интересно посмотреть, что предлагают другие.

При таком подходе набор ключей для преобразования определяется в keyTransforms, что упрощает добавление новых ключей без изменения функции transformKeys.

// Define all keys to transform
const keyTransforms = {
  Min: '.min',
  Max: '.max',
  Actual: '.actual'
};

// transformKeys replaces all keys found in data according to keyTransforms object.
function transformKeys(data) {
  return data.map(element => {
  // replace if match found, otherwise no change.
    element.key = keyTransforms[element.key] || element.key;
    return element;
  });
}
// sample input data
const data = [{
  key: 'Min'
}, {
  key: 'Max'
}, {
  key: 'Actual'
}];

const result = transformKeys([...data]);
console.log(result);
...