Получить свойства из массива объектов - PullRequest
2 голосов
/ 25 июня 2019

Я пытаюсь получить два свойства из каждого массива, а затем сформировать массив из этого. Я также показал ожидаемый результат.


columns = [
           {Header: ƒ, Cell: ƒ, sortable: false, show: true},
           {Header: ƒ, accessor: "firstName", sortable: false, show: true},
           {Header: ƒ, accessor: "status", sortable: false, show: true},
           {Header: ƒ, accessor: "visits", sortable: false, show: true}
          ]

Я хочу, чтобы вывод был

[{name: "firstName",show: true},{name: "status",show: true},{name:"visits", show: true}]

Я пробовал этот подход для получения одного поля. Как получить два значения, а затем сформировать новый массив объектов itslef.

 let keys = [...new Set(arr.map(arr => arr.accessor))]; // able to get one property, but need two in form of object

Ответы [ 5 ]

1 голос
/ 25 июня 2019

Используйте простое Map():

columns.filter(
  col => !!col.accessor).map(
   column => ({ name: column.accessor, show: column.show })
 )

Фильтр удаляет столбцы без свойства accessor.

Map() возвращает форматированный массив.

const columns = [
           {Header:"ƒ", Cell: "ƒ", sortable: false, show: true},
           {Header: "ƒ", accessor: "firstName", sortable: false, show: true},
           {Header: "ƒ", accessor: "status", sortable: false, show: true},
           {Header: "ƒ", accessor: "visits", sortable: false, show: true}
          ]

const newColumns = columns.filter(
      col => !!col.accessor).map(
       column => ({ name: column.accessor, show: column.show })
     );
     
console.log(newColumns);

          
 
0 голосов
/ 25 июня 2019

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

var ƒ = "dummy"
columns = [
           {Header: ƒ, Cell: ƒ, sortable: false, show: true},
           {Header: ƒ, accessor: "firstName", sortable: false, show: true},
           {Header: ƒ, accessor: "status", sortable: false, show: true},
           {Header: ƒ, accessor: "visits", sortable: false, show: true}
          ]
    
  var finalResult = columns.filter(column => column.accessor && column.show).map(item => {
      return {name: item.accessor,show: item.show}
    })
    
    console.log(finalResult)
0 голосов
/ 25 июня 2019

Вы должны вернуть объект внутри функции карты

columns.map(item => {
   return {name: item.accessor, show: item.show}
});
0 голосов
/ 25 июня 2019

Вы можете использовать reduce для создания однострочного:

const columns = [{Header:"ƒ", Cell: "ƒ", sortable: false, show: true},{Header: "ƒ", accessor: "firstName", sortable: false, show: true},{Header: "ƒ", accessor: "status", sortable: false, show: true},{Header: "ƒ", accessor: "visits", sortable: false, show: true}]

var filtered = columns.reduce((acc, {accessor:a, show}) => a ? [...acc, {name: a, show}] : acc , [])
console.log(filtered)

a ? выполнит проверку, чтобы узнать, существует ли accessor, и вытолкнет новый объект, если это произойдет, или вернет эмулятор acc, если его нет.

0 голосов
/ 25 июня 2019
col.map(element => {
    return {accessor: element.accessor, show: element.show}
})

edit: Вместо того, чтобы повторять его дважды, как в других решениях, я предпочитаю проходить через него и добавлять только необходимый элемент.

let res = [];
columns.forEach(element => {
    if(!!element.accessor) {
        res.push({accessor: element.accessor, show: element.show})
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...