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