[英]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'}
];
您不需要 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.