Как вы глубоко заменяете определенные объекты дочерним значением в Lodash?

#javascript #lodash

#javascript #lodash

Вопрос:

У меня есть данные, которые поставляются с локализацией, которая мне не нужна:

title: {'en-US': 'Example Title}

Я хочу создать функцию, которая превращает все объекты локализации в строку.

title: 'Example Title'

Какие методы lodash были бы полезны для этого?

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

1. можете ли вы добавить образец массива данных / объекта?

Ответ №1:

Согласно вашим данным примера, вы можете использовать _.mapValues() с именем свойства нужного вам перевода:

 const data = {
  title: {'en-US': 'Example Title'}
}

const result = _.mapValues(data, 'en-US')

console.log(result)  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>  

Ответ №2:

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

 const data = [{id:11,title:{'en-US':'Example Title 11'}},{id:12,title:{'tr-TR':'Example Title 12'}},{id:13,title:{'en-GB':'Example Title 13'}}];

function removeLocation(data) {
  return _.map(data, obj => {
    const key = _.keys(obj.title)[0];
    return { ...obj, title: obj.title[key] };
  });
}

console.log(removeLocation(data));  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>  

Но если вы собираетесь это сделать, вы можете также сэкономить несколько КБ и использовать собственные методы JS:

 const data = [{id:11,title:{'en-US':'Example Title 11'}},{id:12,title:{'tr-TR':'Example Title 12'}},{id:13,title:{'en-GB':'Example Title 13'}}];

function removeLocation(data) {
  return data.map(obj => {
    const key = Object.keys(obj.title)[0];
    return { ...obj, title: obj.title[key] };
  });
}

console.log(removeLocation(data));