我有一个对象数组和另一个名称数组,如下所示:
作为文件信息对象的对象数组
[
{ fieldname: 'banner', path: 'banner_img_path' },
{ fieldname: 'logo' , path: 'logo_img_path' },
{ fieldname: 'random', path: 'random_img_path' }
]
,这是我的名字数组
['banner', 'logo']
那么如何匹配或映射这两个变量呢!请注意,在映射或匹配之后,应该从原始对象数组中删除所有未使用的对象?我需要得到像这样的对象
{
banner: banner_img_path,
logo : logo_img_path
}
我能够进行匹配,但我一直在擦除那些未使用过的物体。
注意:可能这个问题是重复但只是因为我不知道这个操作的名称是什么! 所以请原谅我。
答案 0 :(得分:0)
我将要保留的名称添加到查找集中。然后我使用forEach并检查每个对象内部fieldname
是否匹配名称集中的任何内容。如果匹配,我会将其添加到newObj
。
const namesToKeep = ['banner', 'logo']
const fileInfo = [
{ fieldname: 'banner', path: 'banner_img_path' },
{ fieldname: 'logo' , path: 'logo_img_path' },
{ fieldname: 'random', path: 'random_img_path' }
]
const names = new Set(namesToKeep)
const newObj = {}
fileInfo.forEach(obj => {
if (names.has(obj.fieldname)) {
newObj[obj.fieldname] = obj.path
}
})
console.log(newObj)

答案 1 :(得分:0)
使用功能本机JavaScript函数有一个简单的解决方案。
const obj = [
{ fieldname: 'banner', path: 'banner_img_path' },
{ fieldname: 'logo', path: 'logo_img_path' },
{ fieldname: 'random', path: 'random_img_path' },
{ fieldname: 'other', path: 'random_img_path' }
];
const names = ['banner', 'logo'];
obj.map((o, i) => {
let match = false;
names.some((item) => {
if (item === o.fieldname) {
match = true;
return true;
}
});
if (!match) {
delete obj[i];
}
});
for (let o in obj) {
document.querySelector('p').innerHTML += obj[o].fieldname + '<br>';
}
&#13;
<p></p>
&#13;