JavaScript частичное совпадение свойства объекта в l oop? - PullRequest
0 голосов
/ 20 апреля 2020

Как я могу преобразовать этот массив объектов

const arr = [{
  my_first_name_1: {
    value: 'jane'
  },
  my_last_name_1: {
    value: 'anderson'
  }
}, {
  my_first_name_2: {
    value: 'alex'
  },
  my_last_name_2: {
    value: 'johnson'
  }
}]

в этот?

[{
  "first_name": "jane",
  "last_name": "anderson",
}, {
  "first_name": "alex",
  "last_name": "johnson",
}]

Я застрял при сопоставлении свойства с частичной строкой

const result = arr.reduce((accum, obj) => {
   obj.match(first_name)  //how to do partial matching? Tried .includes but it doesn't work
}, [])

Ответы [ 3 ]

3 голосов
/ 20 апреля 2020

Этого можно добиться, используя .map() с литералами шаблона , считывая из документации:

Метод map() создает новый массив заполняется результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.

Литералы шаблона - это строковые литералы, допускающие встроенные выражения. С ними можно использовать многострочные строки и функции интерполяции строк.

Попробуйте выполнить следующее:

const arr = [{ my_first_name_1: { value: 'jane' }, my_last_name_1: { value: 'anderson'} }, { my_first_name_2: { value: 'alex' }, my_last_name_2: { value: 'johnson' } }];
  
const result = arr.map((e, i) => ({
  first_name: e[`my_first_name_${i + 1}`].value,
  last_name: e[`my_last_name_${i + 1}`].value
}))

console.log(result);

Надеюсь, это поможет!

1 голос
/ 20 апреля 2020

Если ваши ключи не последовательные, вы можете использовать .map() с Object.values(). Метод .map() будет перебирать каждый объект в вашем массиве, который затем вы можете получить значениями с помощью Object.values(). Из массива значений (которые являются объектами) вы можете деструктурировать свойство объектов value и именовать их как first_name и last_name. Затем вы можете вернуть эти два деструктурированных значения в виде объекта:

const arr = [{ my_first_name_1: { value: 'jane' }, my_last_name_1: { value: 'anderson' } }, { my_first_name_2: { value: 'alex' }, my_last_name_2: { value: 'johnson' } }];

const res = arr.map(obj => {
  const [{value: first_name}, {value: last_name}] = Object.values(obj); 
  return {first_name, last_name};
});

console.log(res);
0 голосов
/ 20 апреля 2020

Вы также можете получить ключи каждого объекта, а затем получить их значение с помощью reduce()

const arr = [{
    my_first_name_1: {
      value: "jane",
    },
    my_last_name_1: {
      value: "anderson",
    },
  },
  {
    my_first_name_2: {
      value: "alex",
    },
    my_last_name_2: {
      value: "johnson",
    },
  },
];

let result = arr.reduce((p, c) => {
  let [first, last] = Object.keys(c);
  return [...p, {
    first_name: c[first].value,
    last_name: c[last].value,
  }];
}, []);

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...