如何只获取Javascript中附加了值的键的数组?
假设我有一个这样的物体:如何只获取Javascript中附加了值的键的数组?,javascript,arrays,loops,object,javascript-objects,Javascript,Arrays,Loops,Object,Javascript Objects,假设我有一个这样的物体: myObject = { key1: "foo", key2: "", key3: "bar", key4: "foobar", key5: undefined } 我想要一个键数组,但前提是。i、 如果它们是未定义的或空字符串,我不希望它们包含在数组中 目前我使用的是Object.keys(myObject),但是这会得到所有的键,包括那些未定义、
myObject = {
key1: "foo",
key2: "",
key3: "bar",
key4: "foobar",
key5: undefined
}
我想要一个键数组,但前提是。i、 如果它们是未定义的或空字符串,我不希望它们包含在数组中
目前我使用的是Object.keys(myObject)
,但是这会得到所有的键,包括那些未定义、false或null值的键
我完全理解我可能可以从Object编写自己版本的keys方法,但我想知道是否有比这更简单的方法。通过条目的关键部分是否真实来过滤条目,然后映射到关键点:
const myObject={
键1:“foo”,
键2:“,
按键3:“酒吧”,
键4:“foobar”,
键5:未定义
};
常量键=Object.entries(myObject)
.filter(([,val])=>val)
.map(([key])=>key);
控制台日志(键)代码>您只需要使用Array.filter()删除具有可为空结果的键
const myObject={
键1:“foo”,
键2:“,
按键3:“酒吧”,
键4:“foobar”,
键5:未定义
};
常量键=对象键(myObject)
.filter(key=>myObject[key])
控制台日志(键)代码>如果您只关心truthy键,您可以使用比上面更简单的过滤器:
myObject={
键1:“foo”,
键2:“,
按键3:“酒吧”,
键4:“foobar”,
键5:未定义
}
truthyKeys=对象
.keys(myObject)//所有键的数组
.filter(k=>myObject[k])//筛选出具有错误值的对象
console.log(truthyKeys)
const myObject={
键1:“foo”,
键2:“,
按键3:“酒吧”,
键4:“foobar”,
键5:未定义
};
const keys=Object.keys(myObject.filter)(key=>myObject[key]);
但是,这也将删除其他错误值,例如0
,NaN
,null
,false
。如果您特别注意防止空字符串和未定义:
const myObject={
键1:“foo”,
键2:“,
按键3:“酒吧”,
键4:“foobar”,
键5:未定义
};
常量键=对象键(myObject)
.filter(key=>myObject[key]!=''&&myObject[key]!==未定义);
我不知道是否还有其他方法,但你可以试试这样的方法
myObject={
键1:“foo”,
键2:“,
按键3:“酒吧”,
键4:“foobar”,
键5:未定义
}
常量getValue=(obj)=>{
常量数组=[];
for(Object.entries(obj))的常量[key,value]{
如果(值){
array.push(按键);
}
}
返回数组;
}
log(getValue(myObject))代码>
说明:
Object.keys将获取属性的所有键(包括包含falsy值的键)
过滤器将遍历myObject中的每个关键点(由i表示)。只有当值为truthy时,条件才为true,因此,过滤掉包含falsy值的键
有几种方法可以做到这一点。您可以使用过滤器:
const myObject={
键1:“foo”,
键2:“,
按键3:“酒吧”,
键4:“foobar”,
键5:未定义
}
var keysWithValues=Object.keys(myObject.filter)(key=>myObject[key]);
console.log(keysWithValues)代码>试试看。
myObject={
键1:“foo”,
键2:“,
按键3:“酒吧”,
键4:“foobar”,
键5:未定义
}
设x=Object.entries(myObject);
for(i=0;ikeys()按它所说的做,因此您需要一个自定义筛选器,就像有人在不到一分钟的时间内编写的那样。如果他们只对keys-Object.keys感兴趣,则迭代次数会减少一次,这一次确实有效,但奇怪的是,使用Object.keys的其他人出于某种原因一直返回空数组。
let objectWithTruthyKeys = Object.keys(myObject).filter(i => myObject[i]);