【问题标题】:Object get the value by a key对象通过键获取值
【发布时间】:2016-10-05 01:44:56
【问题描述】:

我有点被一个问题困住了。这是我的 AJAX 调用的响应。

var test = [
  {
    "analytics.feature": "false"
  },
  {
    "demo": "true"
  },
  {
    "analytics.demo": "false"
  }
]

现在我想检查 analytics.demo 是启用还是禁用。

我可以使用 _.find 吗?

_.find(test, {analytics.demo}); //返回错误

我只想这样做

if(analytics.demo) {
//Do something
}

我该怎么做?有人可以帮忙吗?

我可以使用 underscorejs/jQuery 来获取键的确切值,而不是迭代对象和比较?

【问题讨论】:

  • 纯javascript有什么问题? test[2]["analytics.demo"] 将返回“false”...
  • 顺序不断变化。无论如何我可以搜索“密钥”并获取值。而不是盲目地做 test[2] @nicael

标签: javascript jquery underscore.js


【解决方案1】:
const options = Object.assign(...test)
console.log(options) // { "analytics.feature": "false", demo: "true", "analytics.demo": "false" }
if (options['analytics.demo'] === 'true') {
  // ...
}

(注意这里使用的是 ES6。对于 ES5 使用 var options = Object.assign.apply(object, test) 代替,你还需要 polyfill Object.assign。)

这使用Object.assign()spread operator 将对象合并为一个,然后从新的单个对象中获取“analytics.demo”选项。它必须使用bracket notation 访问,因为键中有一个点。它与字符串 true 进行比较,因为"false"(字符串)为真,但false(布尔)为假的。

有关于flattening arraysconverting strings to booleans 的更多信息。

PS 有什么方法可以让 Ajax 调用使用正确的布尔值而不是字符串?使用起来会更容易。

【讨论】:

    【解决方案2】:

    您可以检查数组中的任何项目是否符合特定条件,如下所示:

    var isDemoEnabled = test.some(function (item) {
        return item['analytics.demo'] === 'true';
    });
    
    if (isDemoEnabled) {
        // Do something 
    }
    

    如果值是布尔值,您可以删除 === 'true'

    【讨论】:

      【解决方案3】:

      假设您使用的是下划线,请查看有关 find 的文档: http://underscorejs.org/#find

      Find 为数组中的每个元素运行一个谓词函数,并返回一个新数组,其中包含谓词函数返回 true 的每个值。

      在这种情况下,我们要查找元素是否具有字段 analytics.demo 为此,我们可以使用下划线函数_.hashttp://underscorejs.org/#has

      总之:

      var result = _.find(test, function(elem) {
          return _.has(elem, "analytics.demo");
        }
      );
      

      【讨论】:

        【解决方案4】:

        您可以遍历并检查是否给出了键并返回结果。

        function getKeyValue(array, key) {
            var value;
            array.some(function (a) {
                if (key in a) {
                    value = a[key];
                    return true;
                }
            });
            return value;
        }
        
        var test = [{ "analytics.feature": "false" }, { "demo": "true" }, { "analytics.demo": "false" }]
        
        console.log(getKeyValue(test, 'analytics.demo')); // 'false' a string with this value

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-03
          • 2021-12-25
          • 2018-03-29
          • 2017-10-27
          • 2012-04-12
          • 2021-09-25
          相关资源
          最近更新 更多