如何在与另一个数组匹配后删除未使用的对象?

时间:2017-11-17 23:50:24

标签: javascript node.js

我有一个对象数组和另一个名称数组,如下所示:

作为文件信息对象的对象数组

[
  { 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
}

我能够进行匹配,但我一直在擦除那些未使用过的物体。

注意:可能这个问题是重复但只是因为我不知道这个操作的名称是什么! 所以请原谅我。

2 个答案:

答案 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;
&#13;
&#13;