对象通过键获取值

时间:2016-06-05 10:08:05

标签: javascript jquery underscore.js

我有点陷入困境。这是我的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来获取密钥的确切值,而不是迭代对象和比较吗?

4 个答案:

答案 0 :(得分:4)

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)代替,您还需要填充Object.assign。)

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

有关flattening arraysconverting strings to booleans的详细信息。

PS是否有任何方法可以让Ajax调用使用正确的布尔值而不是字符串?使用它会更容易。

答案 1 :(得分:3)

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

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

if (isDemoEnabled) {
    // Do something 
}

如果值为布尔值,则可以删除=== 'true'

答案 2 :(得分:2)

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

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

在这种情况下,我们想要查找元素是否具有字段analytics.demo 为此,我们可以使用下划线函数{ "name": "FirstPolyline", "location": { "type":"LineString", "coordinates": [ [100.0, 0.0], [101.0, 0.0] ] } } http://underscorejs.org/#has

总而言之:

_.has

答案 3 :(得分:2)

您可以迭代并检查是否给出了密钥,然后返回结果。



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