Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何只获取Javascript中附加了值的键的数组?_Javascript_Arrays_Loops_Object_Javascript Objects - Fatal编程技术网

如何只获取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]);