【问题标题】:javascript. Iterate in array with map with variable itemsjavascript。使用带有变量项的映射在数组中迭代
【发布时间】:2021-07-31 05:54:06
【问题描述】:

对不起,如果重复了一些问题,但我搜索了很多,没有找到任何东西。 我必须在js中填写一个表格。为此,我获取对象数组(中心)的值并应用地图。 一切正常。

centers = [
        { 'center': 'Center 1',
          'datos': { "key1":4.67,
                     "key2":3.56
                    } 
        },

        { 'center': 'Center 2',
          'datos': { "key1":0.34,
                     "key2":5} 
                    },

        { 'center': 'Center 3',
          'datos': { "key1":3.7,
                     "key2":2.5} 
                    }
        ]

let result = centers.map(res => {
    let columns = {'column1':res.datos.key1, 'column2':res.datos.key2}
    return columns;
})

/* result =  [
  [
    { column1: 4.67, column2: 3.56 },
    { column1: 0.34, column2: 5 },
    { column1: 3.7, column2: 2.5 }
  ]
]

*/

但是,“key1 ...... key1000”的项目很多,我想像这样在地图函数中实现它们

var cc = ['key1','key2','key3','key4','key5'];

let result = centers.map(res => {
    let columns = {'column1':res.datos.cc[0], 'column2':res.datos.cc[1], ...........}
    return columns;
})

但它不取变量的值。 地图可以吗?谢谢。

【问题讨论】:

  • 要从动态键访问对象值,请尝试res.datos[cc[0]]

标签: javascript arrays dictionary object iterator


【解决方案1】:

const centers = [{
  'center': 'Center 1',
  'datos': {
    "key1": 4.67,
    "key2": 3.56
  }
}, {
  'center': 'Center 2',
  'datos': {
    "key1": 0.34,
    "key2": 5
  }
}, {
  'center': 'Center 3',
  'datos': {
    "key1": 3.7,
    "key2": 2.5
  }
}]

const result = centers.map(res => Object.entries(res.datos).reduce((acc, [key, value]) => ({ ...acc,
  [key.replace('key', 'column')]: value
}), {}))
console.log(result)

【讨论】:

    【解决方案2】:

    你需要使用 Object.keys(res) 来获取数组中的所有键 cc 然后首先在 for 循环中使用动态变量名称来命名列(从 (column1) 开始并命名键从 cc 中的 0 和名称中的 1 开始 cc[0] => key1

    
    let result = centers.map(res => {
    
        cc = Object.keys(res); // ['key1','key2','key3','key4','key5']
        let columns : {};
    
        for (let i = 0; i < cc.length; i++) {
           // for i = 0 =>  columns['column1'] = res.datos[key0]
           // for i = 0 =>  columns.columns1 = res.datos.key0
            columns['column' + (i + 1)] = res.datos[`${cc[i]}`] ;
        
        }
    
        return columns ;
    
    }
    

    【讨论】:

      【解决方案3】:

      我终于能够解决了。我发帖以防万一

      centers = [
              { 'center': 'Center 1',
                'datos': { "key1":4.67,
                           "key2":3.56
                          } 
              },
      
              { 'center': 'Center 2',
                'datos': { "key1":0.34,
                           "key2":5} 
                          },
      
              { 'center': 'Center 3',
                'datos': { "key1":3.7,
                           "key2":2.5} 
                          }
              ]
      
      
       var cc = ['key1','key2'];
      
      for (let i = 0; i < cc.length; i++) {
              
      centers.map(res => {
          let nombreColumna = "column"+i;
          let columns = {[nombreColumna]:res.datos[cc[i]]}
           arrayOut.push (columns);
          return arrayOut;
      })
      }
      
      /*
      arrayOut:
      
      [
        [
          { column0: 4.67 },
          { column0: 0.34 },
          { column0: 3.7 },
          { column1: 3.56 },
          { column1: 5 },
          { column1: 2.5 }
        ]
      ]
      
      ´´´
      
      

      【讨论】:

        猜你喜欢
        • 2015-05-26
        • 2013-10-04
        • 2020-12-27
        • 2012-11-30
        • 1970-01-01
        • 2016-09-19
        • 2016-04-10
        • 2022-01-23
        相关资源
        最近更新 更多