这在技术上有效,但感觉很笨重。是否有更有效的方法来检查特定属性是否返回true,如果是,则将其推送到数组,然后检查下一个所需的属性,依此类推?
例如:
let createHero = {
name: "OJ",
trauma1: "abc",
trauma2: "def",
nickname: "spool"
}
let trauma = [];
if ( createHero.trauma1 ){
trauma.push( createHero.trauma1 )
}
if ( createHero.trauma2 ){
trauma.push( createHero.trauma2 )
}
if ( createHero.trauma3 ){
trauma.push( createHero.trauma3 )
}
if ( createHero.birthDate ){
trauma.push( createHero.birthDate )
}
if ( createHero.name ){
trauma.push( createHero.name )
}
console.log(trauma) //[ "abc" , "def", "OJ" ]
我在AngularJs-Express应用程序中构建这个,所以我不想使用Jquery。
我错过了什么?也许正则表达式可以帮忙吗?
更新
我使用的功能主要由@andersVestergaard提供。它允许我为它提供一个对象和模式,返回数组中匹配属性的值。
//filter is a regex pattern
let filterForValues = function(object, filter) {
let key, keys = [];
for (key in object) {
if (object.hasOwnProperty(key) && filter.test(key)) {
keys.push(object[key]);
}
}
return keys;
}
let traumaArray = filterForValues(createHero, /trauma/i);
console.log(traumaArray); //[ "abc" , "def"]
答案 0 :(得分:2)
如果我理解正确,您可以使用for..in循环遍历该对象:
for (var key in createHero ) {
if (createHero.hasOwnProperty(key)) {
trauma.push(createHero[key]);
}
}