Javascript 如何仅返回具有数字值的键的对象?

Javascript 如何仅返回具有数字值的键的对象?,javascript,Javascript,我有以下目标 {date_created: 1546293600000, num: 370, num2: NaN, num3: 100, category: "C"} 我希望我的输出是 {num: 370, num3: 100} 删除date_created、num2和category理想情况下,它还将删除值中的任何null或未定义的内容 Object.keys(obj).filter(key => !isNaN(obj[key])) 让obj={ 创建日期:15462936000

我有以下目标

{date_created: 1546293600000, num: 370, num2: NaN, num3: 100, category: "C"}
我希望我的输出是

{num: 370, num3: 100}
删除date_created、num2和category理想情况下,它还将删除值中的任何null或未定义的内容

Object.keys(obj).filter(key => !isNaN(obj[key]))
让obj={
创建日期:1546293600000,
总数:370,
num2:NaN,
num3:100,
类别:“C”
}
让keys=Object.keys(obj.filter)(key=>!isNaN(obj[key]))
设newObj={}
keys.forEach(key=>newObj[key]=obj[key])
log(newObj)
您可以使用属性和

关于“date_created”属性,您可以添加如下内容:

忽略名称中包含“日期”的所有属性,即使其值是数字

var newObject = Object.keys(myObject)
.filter(key => {
  if (key.includes("date")) return false;
  return !isNaN(myObject[key]);
}).reduce((output, key) => {
  output[key] = obj[key];
  return output;
}, {});

您可以使用
filter
过滤掉所有
NaN
值(不是数字,也不是字符串、对象等)。然后重新映射键以获取值:

const obj={date_created:1546293600000,num:370,num2:NaN,num3:100,category:“C”}
const newObj=Object.keys(obj)
.filter(key=>!isNaN(obj[key]))
.减少((附件,钥匙)=>{
acc[键]=obj[键];
返回acc;
}, {});

console.log(newObj)您可以使用reduce函数

function getNumbersObj(obj) {
  return Object.keys(obj).reduce((newObj, key) => {
    const value = obj[key];
    if (typeof value === 'number') {
      newObj[key] = value
    }
    return newObj
  }, {})
}
编辑:对于
date\u created
这是一个数字,您可以显式地过滤掉键

function getNumbersObj(obj) {
  return Object.keys(obj).reduce((newObj, key) => {
    const value = obj[key];
    if (typeof value === 'number' && key !== 'date_created') {
      newObj[key] = value
    }
    return newObj
  }, {})
}

您可以将“循环通过”与筛选器一起使用,并仅返回数字

const对象={
创建日期:1546293600000,
总数:370,
num2:NaN,
num3:100,
类别:“C”
}
让newObj=Object.keys(objects.filter)(key=>
!伊斯南(钥匙))

从效率的角度来看,console.log(newObj)
不是最好的解决方案,但这里有一个解决方案:

const originalObj={
创建日期:1546293600000,
总数:370,
num2:NaN,
num3:100,
类别:“C”
}
常量objWithUndefined={
创建日期:1546293600000,
总数:370,
num2:NaN,
num3:未定义,
类别:“C”
}
常量objWithNull={
创建日期:1546293600000,
num:null,
num2:NaN,
num3:100,
类别:“C”
}
函数modifyObject(原始){
设newObj=Object.assign({},original);
删除newObj.date\u创建日期;
删除newObj.num2;
删除newObj.category;
for(新OBJ中的var prop){
if(newObj[prop]==未定义| | newObj[prop]==空){
删除newObj[prop]
}
}
返回newObj;
}
log(“原始:+JSON.stringify(modifyObject(originalObj),null,2));
log(“objWithUndefined:+JSON.stringify(modifyObject(objWithUndefined),null,2));

log(“objWithNull:+JSON.stringify(modifyObject(objWithNull),null,2))但创建日期是一个数字。除此之外,看看@jarmod,如果他已经在用lodash做别的东西,那就好了。但是我不建议任何人为这样一个简单的任务包括一个库,你想删除
date\u created
num2
category
,而不管它们的值是多少,除此之外,还有任何具有空值或未定义值的键吗?不完全是clear@CristianTraìna同意,现在你可以用原生JavaScript轻松解决这个问题。你也可以使用
Object.values()
直接检查值。请注意,NaN也是numberYou只能通过在reducePersonal opinion中过滤循环一次,但我发现这种格式更具可读性。通过这种方式,您可以准确地知道要过滤出的内容,并且可以轻松地链接新的
过滤器
映射
。显然,它不是以表演为导向的,有时是美>表演。我同意它更具可读性:)
function getNumbersObj(obj) {
  return Object.keys(obj).reduce((newObj, key) => {
    const value = obj[key];
    if (typeof value === 'number' && key !== 'date_created') {
      newObj[key] = value
    }
    return newObj
  }, {})
}