提取JavaScript对象中的第一个非空键值对

提取JavaScript对象中的第一个非空键值对,javascript,javascript-objects,Javascript,Javascript Objects,假设我有以下对象: const obj={ 答:空, b:空, c:1 } 我要提取的是第一个非空对,这里是{c:1} 我当前的尝试可以工作,但它是硬编码的,不是动态的: const data=obj.a?{a:obj.a}:(obj.b?{b:obj.b}:{c:obj.c}) 你是说像这样 const obj={ 答:空, b:空, c:1 } 常量数据={} 用于(输入obj){ 如果(obj[key])数据[key]=obj[key] } console.log(数据)您可以使用Ob

假设我有以下对象:

const obj={
答:空,
b:空,
c:1
}
我要提取的是第一个非空对,这里是
{c:1}

我当前的尝试可以工作,但它是硬编码的,不是动态的:

const data=obj.a?{a:obj.a}:(obj.b?{b:obj.b}:{c:obj.c})
你是说像这样

const obj={
答:空,
b:空,
c:1
}
常量数据={}
用于(输入obj){
如果(obj[key])数据[key]=obj[key]
}

console.log(数据)
您可以使用
Object.keys
获取对象的键。然后,使用
find
返回具有非空值的第一个键

const obj={
答:空,
b:空,
c:1
}
const keyWithValue=Object.keys(obj).find((key)=>obj[key]!==null);
返回{[keyWithValue]:obj[keyWithValue]};

您可以迭代对象键,并在找到第一个非空值后使用break停止循环。 也许是这样的:

const obj={
答:空,
b:空,
c:1
}
让我们不要放弃价值;
用于(让道具插入obj){
如果(对象[prop]!==null){
notNullValue={[prop]:obj[prop]};
打破
}
}

console.log(notNullValue)使用对象属性顺序通常不是一个好主意(对于那些不完全了解其工作原理的人来说很困惑,而其他人则倾向于根本不使用它)。因此,我在“第一”部分有点纠结,而不是实际问题。根据您的硬编码尝试,是否自定义了属性顺序,而不是ES2020属性顺序?我的意思是,你可以做
Object.entries(obj).find([,v])=>v!==null)
,但我担心你得到的“顺序”可能不完全清楚(还要注意,你需要用
Object.fromEntries
包装它,但是当出现另一个问题时会进行错误处理)。@ASDFGerte谢谢你的提示,但在我的用例中只有两种情况:-只给出一个值-多个值,所有值都引用数据库中的唯一列,所以选择哪一个并不重要