首页 > 解决方案 > 如何从javascript中的数组键名中获取匹配的名称

问题描述

试图从数组键名中获取匹配的名称但不起作用。我有两个类似数组的列和项目。我不知道如何将数组键名与列名单词匹配并将其分配给字段值。如果有人知道,请帮助找到解决方案。

var column = ['File Name', 'Sur Name', 'Last Name', 'Place Of Work', 'Work Id']; 
var newColumn = []; 
var item = [
    {
        fileName: 'test1',
        surName: 'test1',
        lastName: 'test1',
        placeOfWork: 'test1',
        workId: 'test1'
    }
];

column.forEach(e => {
    newColumn.push({
        label: e,
        field: function(){
            if(item.keys( e.toLowerCase() == item.keys().toLowerCase())) return item.keys(); 
        }
    });
});

console.log(newColumn);

输出应该是:

newSolumn= [
    {label:'First Name',field:'fileName'},
    {label:'Sur Name',field:'surName'}, 
    {label:'Last Name',field:'lastName'},
    {label:'Place Of Work',field:'placeOfWork'},
    {label:'Work Id',field:'workId'}
];

演示:https ://stackblitz.com/edit/js-gatg4v

标签: javascriptarrays

解决方案


您不需要在创建的对象中将函数作为值,您需要调用它而不是将其分配为值,并且您还需要删除字符串中的空格以便比较它们,我使用函数替换删除无用的空格。

var column = ['File Name', 'Sur Name', 'Last Name', 'Place Of Work', 'Work Id'];

var newColumn = [];

var item = [
  {
    fileName: 'test1',
    surName: 'test1',
    lastName: 'test1',
    placeOfWork: 'test1',
    workId: 'test1'
  }
];

column.forEach(e => {
  newColumn.push({
    label: e,
    field: getField(e)
  });
});

function getField(columnName) {
  for (key in item[0]) {
    if (
      columnName.replace(/\s/g, '').toLowerCase() ===
      key.replace(/\s/g, '').toLowerCase()
    ) {
      return key;
    }
  }
}

console.log(newColumn);

推荐阅读