按 Javascript 中的键过滤对象数组
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",
}]
谁能告诉我到底哪里做错了?
参见this文章
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
给你数组,你的方法给你正确的对象。
祝你好运!
我浏览了几篇关于根据键过滤数组的类似帖子,并尝试实现它,但无法获得正确答案。 这是我的代码 -
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",
}]
谁能告诉我到底哪里做错了?
参见this文章
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
给你数组,你的方法给你正确的对象。 祝你好运!