[英]Filter an array of objects by keys in Javascript
我已经阅读了几篇关于基于键过滤数组的类似帖子,并尝试实现它,但无法得到正确的答案。 这是我的代码 -
const data = [{
dnum: "061806",
enddate: "2022-05-31",
fnum: 0.7,
role: "MP",
startdate: "2022-01-13",
}, {
dnum: "061806",
enddate: "2022-05-31",
fnum: 0.786,
role: "MP",
startdate: "2022-01-13",
}]
function copyObjectProps(source, keys) {
let newObject = {}
keys.forEach(function(key) {
newObject[key] = source[key]
})
return newObject
}
let filteredObject = copyObjectProps(data, ['dnum', 'role', 'fnum'])
console.log(filteredObject)
我得到以下结果 -
{
dnum: undefined,
role: undefined,
fnum: undefined
}
但我期待它是这样的 -
[{
dnum: "061806",
fnum: 0.7,
role: "MP",
}, {
dnum: "061806",
fnum: 0.786,
role: "MP",
}]
谁能告诉我我到底做错了什么?
看这篇文章
const data = [{ dnum: "061806", enddate: "2022-05-31", fnum: 0.7, role: "MP", startdate: "2022-01-13", },{ dnum: "061806", enddate: "2022-05-31", fnum: 0.786, role: "MP", startdate: "2022-01-13", }] function selectProps(props){ return function(obj){ const newObj = {}; props.forEach(name =>{ newObj[name] = obj[name]; }); return newObj; } } let filteredObject1 = data.map(selectProps(['dnum', 'role','fnum'])) let filteredObject2 = data.map(selectProps(['dnum','fnum'])) console.log(filteredObject1) console.log(filteredObject2)
编辑如果想更改键名我做了这样的事情
const data = [{ dnum: "061806", enddate: "2022-05-31", fnum: 0.7, role: "MP", startdate: "2022-01-13", },{ dnum: "061806", enddate: "2022-05-31", fnum: 0.786, role: "MP", startdate: "2022-01-13", }] function selectProps(props){ return function(obj){ const newObj = {}; props.forEach(el =>{ newObj[el[1]] = obj[el[0]]; }); return newObj; } } let filteredObject = data.map(selectProps([['dnum','DNUM'],['fnum','fnum'],['role','Role Name']])) //if dont want to change key name send like this ['dnum','dnum'] console.log(filteredObject)
你几乎成功了。 以下是您需要更改以使其工作的内容:
// modify this line
let filteredObject = copyObjectProps(data, ['dnum', 'role', 'fnum'])
// to this
const filteredObject = data.map(item => {
return copyObjectProps(item, ['dnum', 'role', 'fnum']))
}
这是发生了什么:
map
为您提供阵列,您的方法为您提供正确的 Object。 祝你好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.