按 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']))
}

事情是这样的:

  1. 您正在构建新对象。
  2. 您没有注意到您需要一个对象数组。 map 给你数组,你的方法给你正确的对象。 祝你好运!