繁体   English   中英

如何从 javascript 中的数组键名中获取匹配的名称

[英]How to get matched name from array key name in 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);

Output 应该是:

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

您不需要 function 作为您创建的 object 中的值,您需要调用它而不是将其作为值分配,并且您还需要删除字符串中的空格以替换它们,我使用 ZC1C425268E68384F14删除无用的空格。

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);

这部分是错误的:

field: function(){
  if(item.keys( e.toLowerCase() == item.keys().toLowerCase())) return item.keys(); 
}

它的一些问题:

  • 您不希望field成为 function。 它应该是一个字符串值。 因此,如果有要评估的条件,则应在创建目标 object 之前对其进行评估,否则过滤结果以删除field无法匹配的结果。

  • item.keys()不带任何参数,因此您在那里的表达式不会有任何用途。 要匹配item中的属性,最好从一开始就将其设置为小写,这样您就可以利用直接查找的优势。 所以item可能有键/值对,如:

     placeofwork: "placeOfWork"

    现在你可以做item[e.toLowerCase()]

  • 在尝试匹配之前,应从e中删除空格。

这是一个更正:

 let column = ['File Name', 'Sur Name', 'Last Name', 'Place Of Work', 'Work Id']; let item = Object.fromEntries( ["fileName", "surName", "lastName", "placeOfWork", "workId"].map(field => [field.toLowerCase(), field]) ); let newColumn = column.map(label => ({ label, field: item[label.toLowerCase().replace(/\s/g, "")] })).filter(o => o.field); console.log(newColumn);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM