Фильтровать свойство из нескольких объектов в массиве - PullRequest
3 голосов
/ 12 марта 2019

У меня есть массив объектов, которые выглядят так:

const data = [
    {id: 1, locale: 'en'},
    {id: 2, locale: 'nl'}
]

Теперь я пытаюсь отфильтровать свойство locale в каждом элементе массива (не удалять его дляхорошо, просто отфильтруйте это один раз), поэтому мои данные в идеале будут выглядеть так:

const data = [
    {id: 1},
    {id: 2}
]

Я пробовал

  • Использование функции карты для разбросасвойства, но я застрял в том, как продолжить это.

    this.translations.map(translation => {
        return { ...translation }
    })
    

Ответы [ 3 ]

10 голосов
/ 12 марта 2019

Вы можете использовать деструктурирование параметра , чтобы извлечь locale и оставить остальные:

const data = [
    {id: 1, locale: 'en'},
    {id: 2, locale: 'nl'}
]

const withoutLocale = data.map(({locale, ...rest}) => rest)

console.log(withoutLocale)
0 голосов
/ 12 марта 2019

Вот способ, используя map() reduce() filter(). Этот метод предназначен для фильтрации динамических ключей.

const data = [
    {id: 1, locale: 'en'},
    {id: 2, locale: 'nl'}
]
let filter = ['locale']
function removeKeys(keys,arr){
  return data.map(x => Object.keys(x).filter(b => !keys.includes(b)).reduce((ac,a) => ({...ac,[a]:x[a]}),{}))
}

console.log(removeKeys(filter,data));
0 голосов
/ 12 марта 2019

Сделайте так ({key:value}) с картой возврата

Для вашего случая

this.translations.map(translation => {
    return ({['id']:translation.id })
})

Рабочий пример

const data = [{id: 1, locale: 'en'},{id: 2, locale: 'nl'}];

var res = data.map(a=> ({['id']:a.id}));
console.log(res)
...