【问题标题】:Loop through object containing boolean values循环遍历包含布尔值的对象
【发布时间】:2018-08-20 23:04:47
【问题描述】:

我在可能包含布尔值的键/值对中有一个对象。我需要评估值的类型,所以我知道要返回什么。所以假设我有一个看起来像这样的对象:

{ 
 aKey: false,
 anotherKey: 4,
 yetAnotherKey: true
}

我想遍历那里的每个键/值对,并根据值的类型做一些不同的事情。如果我使用Object.keys(options).map((key, index),它会将布尔值从真/假转换为 0/1,所以我无法知道这些实际上是布尔值。

最好的方法是什么?

【问题讨论】:

  • 根据您粘贴的内容不应该发生任何转换。如果你在键上使用内置的 typeof 函数,你应该能够得到你需要的东西。
  • 不禁要说,如果你事先不知道期望什么键或者它们将有什么类型,那么你正在处理一个巨大的混乱,不可避免的结果是一个巨大的把更多相同的东西堆在上面……

标签: javascript typescript javascript-objects


【解决方案1】:

我认为你只是“oopsied”——你甚至没有在你的 map 函数中检查 options 对象的值。提供给Array#map 回调的第二个参数始终是索引。

扩展您的代码以检查 options 中值的类型:

Object.keys(options).map((key, i, all_keys) => {
  let val = options[key];
  console.log(typeof val)
  ...
});

考虑查看 JavaScript 中不同的迭代/枚举方法,例如 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration

How to iterate over a JavaScript object?

【讨论】:

  • 我还是更喜欢使用内置函数,在这种情况下,它比老式的 for 循环要干净得多。
【解决方案2】:

您的.map(key, index) 正在循环数组["aKey", "anotherKey", "yetAnotherKey"] 并丢失options 中的值。也许这样的东西对你有用:

for( o in options ){
    console.log(o, options[o])
}

> aKey false
> anotherKey 4
> yetAnotherKey true

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2019-08-07
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    相关资源
    最近更新 更多