首页 > 解决方案 > 通过属性名称重新创建对象数组的最有效方法是什么?

问题描述

很简单的一个,但是我还在想它,我搜索了但我想找到最有效的方法,所以来发布它。在以下情况下,在 javascript 中重新创建对象(Object1 -> Object2)的最有效方法是什么?

Object1
[
    {col1:'value1', col2:'value1', col3:'value1', col4:'value1', col5:'value1', col6:'value1'},
    {col1:'value2', col2:'value2', col3:'value2', col4:'value2', col5:'value2', col6:'value2'},
    {col1:'value3', col2:'value3', col3:'value3', col4:'value3', col5:'value3', col6:'value3'}
]

filterColumns = ['col1', 'col3', 'col5'];

Object2 
[
    {col1:'value1', col3:'value1', col5:'value1'},
    {col1:'value2', col3:'value2', col5:'value2'},
    {col1:'value3', col3:'value3', col5:'value3'}
]

标签: javascriptarraysobject

解决方案


您需要遍历第一个数组中的每个对象。

减少对象内部的属性

const obj1 = [{
    col1: 'value1',
    col2: 'value1',
    col3: 'value1',
    col4: 'value1',
    col5: 'value1',
    col6: 'value1'
  },
  {
    col1: 'value2',
    col2: 'value2',
    col3: 'value2',
    col4: 'value2',
    col5: 'value2',
    col6: 'value2'
  },
  {
    col1: 'value3',
    col2: 'value3',
    col3: 'value3',
    col4: 'value3',
    col5: 'value3',
    col6: 'value3'
  }
]

const filterColumns = ['col1', 'col3', 'col5'];

// map over object one
// reduce each object into a smaller size
const result = obj1.map(obj => filterColumns.reduce((r, col) => {
  r[col] = obj[col];
  return r;
}, {})); 

console.log(result)


推荐阅读