Javascript 检查对象中哪个属性具有值的最快方法?

Javascript 检查对象中哪个属性具有值的最快方法?,javascript,object,Javascript,Object,可能是个愚蠢的问题假设我有一个像下面这样的物体 {"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""}" 在不使用循环的情况下,检查哪些属性保存上述对象中的值的最快方法是什么 当在for循环中执行此操作时 if(typeof someUndefVar == whatever) -- works 预期输出: 国家、大陆和国家 var a = {"Cou

可能是个愚蠢的问题假设我有一个像下面这样的物体

{"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""}"
在不使用循环的情况下,检查哪些属性保存上述对象中的值的最快方法是什么

当在for循环中执行此操作时

if(typeof someUndefVar == whatever) -- works
预期输出:

国家、大陆和国家

var a = {"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""};

Object.keys(a).filter( prop => a[prop] );

它还取决于您希望如何处理
0
null
未定义的值

您需要使用
object.keys()
函数

像这样,

var jsonData= {"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""};
console.log(Object.keys(jsonData));

希望这有帮助

你可以这样做

var obj={“国家”:“国家”、“大陆”:“大陆”、“省”:“地区”:“州”:“州”、“市”:“};

对于(obj中的var prop)!!obj[prop]&控制台日志(prop)很抱歉,你说没有循环,我很兴奋,很无聊,很正常

首先,我缩短了一些名字,我想它们是不言自明的:

  • 头:数组的第一个元素
  • 尾:除第一个元素外的所有元素
  • isEmpty:检查数组的长度是否为0
transform
使用回调执行实际工作,如果keys数组为空,则停止,如果不是递归的

var data = {"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""}

// plumbing
var head = (a) => a[0]
var tail = (a) => a.slice(1)
var isEmpty = (a) => a.length === 0

// actual stuff happens here
var transform = (obj, callback) => {

    var withval = (keys) => {

      if(isEmpty(keys)) return

      var p = head(keys)

      if(!!obj[p]) callback(p)

      withval(tail(keys))
    }

    withval(Object.keys(obj))
}

// Logs
var log = (p) => console.log(p)
transform(data, log)

// Array making
var arr = [];
var toArr = (p) => arr.push(p)
transform(data, toArr)
console.log(arr)

// Object making
var obj = {}
var toObj = (p) => obj[p] = data[p]
transform(data, toObj)
console.log(obj)
结果:

Country
Continent
State
[ 'Country', 'Continent', 'State' ]
{ Country: 'country', Continent: 'continent', State: 'state' }

你能解释一下
的意思吗!!obj[prop]
对我来说??我从未见过双重
@Fadhly Permata基本上是将falsy或truthy值转换为布尔值<代码>“未定义的”
0
(数字)在JS中是错误的值,如果像
那样执行!0
(单个否定)变为
。所以双重否定或双重爆炸(
!!
)将其置于布尔状态
!!0
false
。相应地
!!“
(双反空字符串)为
false
&&
的第二部分永远不会执行。oooooo。。。所以我们不需要添加
()
括号来实现这一点?三个或更多的否定词怎么样,例如:
!!!obj[prop]
。如果我使用
()
例如
,我相信这将是好的!(!(!obj[prop])
@Fadhly Permata虽然可以使用括号,但没有必要,除非您要计算一组值的组合布尔值。所以让我们假设
obj[prop]=“然后
!obj[prop]
将是
真的
!!obj[prop]
将是
false
!!!obj[prop]
将再次为
true
。好的。。。非常感谢你,伙计。。。今天我的每日投票限额达到了。。明天我会在这里投票给你所有的答案。。。再次感谢:)