Как обрезать ключ и значение из массива объектов с помощью lodash

#javascript #node.js #lodash

Вопрос:

У меня есть массив объектов, как показано ниже.

  {
    "Id": 11,
    "name ": "xxN "
  }
 

Как я могу использовать trim метод lodash для обрезки как ключа, так и значения.

  {
    "Id": 11,
    "name": "xxN"
  }
 

Ожидаемый:

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

1. каков ваш ожидаемый результат?

2. добавлен ожидаемый раздел

3. в чем здесь разница?

4. после «имени «: «xxN» это пробел, который мне не нужен

Ответ №1:

Обязательно ли использовать Lodash? С ванильным JavaScript:

 result = Object.fromEntries(Object.entries(data).map(([key, value]) => 
    [key.trim(), typeof value == 'string' ? value.trim() : value]))
 

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

1. выглядит многообещающе. Но я использую узел 10 для своего проекта и получаю TypeError: Object.fromEntries is not a function эту ошибку

2. @Nick Узел 10 не поддерживает Object.fromEntries . Вам необходимо выполнить обновление до узла 14.

3. Да @Spectric, Вот почему я искал lodash. Не удается обновить проект до узла 14. несколько вещей могут сломаться. 😔

4. @Spectric Я предполагаю, что он вообще не может обновиться.

Ответ №2:

Для полноты картины, вот решение Lodash, использующее _.transform()

 const obj = {
  "Id": 11,
  "name ": "xxN "
}

const transformed = _.transform(obj, (result, value, key) => {
  result[key.trim()] = typeof value === "string" ? value.trim() : value
})

console.log(transformed) 
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script> 

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

Ответ №3:

Использование метода обрезки lodash

 const arr = [
  {
    Id: 11,
    "name ": "xxN ",
  },
  {
    Id: 12,
    "name ": " yyK ",
  },
];

const result = arr.map((o) =>
  Object.fromEntries(
    Object.entries(o).map(([k, v]) => [k, typeof v === "string" ? _.trim(v) : v])
  )
);

console.log(result); 
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script> 

Ответ №4:

Ванильный js был бы лучше, если бы у вас была поддержка для этого, но с lodash

 var trimmed = _.fromPairs(
  _.map(input, (value, key) => [
    _.trim(key),
    typeof value === "string" ? _.trim(value) : value
  ])
);
 

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

1. Вам это нужно _.toPairs ? Не _.map() работает с объектами?

2. @Бармар, Хорошее решение