繁体   English   中英

通过 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",
}]

谁能告诉我我到底做错了什么?

这篇文章

 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. 您正在构建新的 Object 权利。
  2. 你错过了你需要一个对象数组。 map为您提供阵列,您的方法为您提供正确的 Object。 祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM