检查数组中的项是否存在于对象内部
Check if item in array exists inside object
所以我有一个对象数组,我需要对照发送的几个变量进行检查。我使用下划线(不过纯javascript也可以)我有一个看起来像这样的对象数组-
var o = [{
module: "mod1",
customUrl: [{
"state": "name1",
"options": ["option1", "option2", "option3"]
}, {
"state": "name2",
"options": ["option1", "option2", "option3"]
}]
}, {
module: "mod2",
customUrl: [{
"state": "name1",
"options": ["option1", "option2", "option3"]
}, {
"state": "name2",
"options": ["option1", "option2", "option3"]
}]
}]
我有一个函数,其中传递了三个变量,我想检查最后一个是否存在于前两个变量中。让我告诉你我的意思
test = function (module, state, option){
}
所以我想做的是,例如,如果我通过了
test(mod1,name1, option2);
我想检查是否有一个键为"mod1"的模块,然后在该对象内部,自定义url内部有一个状态为"name1"的对象,以及该对象选项数组内部是否有值"options2"。这是一些更严重的遍历,我可以使用一些帮助。感谢阅读!
使用Undercore.js,它将像一样简单
function testContains(o, module, state, option) {
return _.chain(o)
.findWhere({module: module})
.result('customUrl')
.findWhere({state: state})
.result('options')
.contains(option)
.value();
}
演示:http://jsfiddle.net/3f1n32tj/
一个纯JavaScript版本:
function test(o, module, state, option) {
return o.some(function(o) {
return o.module == module && o.customUrl.some(function(o) {
return o.state == state && o.options.indexOf(option) != -1;
})
});
}
http://jsfiddle.net/5335bp4j
下面是一个如何使用lodash实现这一点的示例。(注意,我将您的o
数组命名为objects
,因为o
在示例中看起来很混乱。):
function test(moduleName, stateName, optionName) {
var object = _.find(objects, function(object) { return object.module == moduleName; });
if (object) {
var customUrl = _.find(object.customUrl, function(customUrl) { return customUrl.state == stateName; });
if (customUrl) {
var option = _.find(customUrl.options, function(option) { return option == optionName; });
}
}
return !!option;
}
请参阅http://jsfiddle.net/bvaughn/53h6zoeq/
很明显,您可以用vanillaJS实现同样的东西。
您可以使用两个循环遍历数据结构:
o.forEach(function(m) {
if (m.module === mod1) {
m.customUrl.forEach(function(s) {
if (f.state === name1 &&
f.options.indeOf(option2) >= 0) {
// We found it (one of them)
}
});
}
});
在阵列上使用indexOf
可以避免第三个循环。
相关文章:
- 访问JSON对象内部的数组元素
- 如何确定对象内部包含对象的JSON的长度
- 正在更新mongod中两个对象内部的数组
- 如何访问对象内部的“categoryIds”字段/键,该对象包含mongodb's `ObjectId(s)`数
- 在javascript中移动对象内部的元素
- 基于使用angular在下拉列表中选择的对象,迭代对象内部的对象
- 如何清除Javascript对象内部的setTimeout
- 为什么数组在对象内部迭代对象时存储重复值
- 我如何使用D3来强制用户点击g.node对象内部的圆形对象
- 正在获取对象内部数组中的对象总数
- 从对象内部调用knockout.js ko.applyBindings()
- 使用ng-src增强对象内部的数组
- 如何在javascript中从对象内部的数组中获取数据
- 对象内部函数内的对象文本的范围
- 在 Forerunner 数据库集合中创建主键时,key 属性是否可以位于集合对象的对象内部
- 如何过滤对象内部深度堆叠的数据(并在之后编辑删除它)
- 对象内部数组中的角度 ng 重复键
- 访问对象内部的数组
- Jhon Papa Angular Style guide Factory-对象内部的函数未运行
- 检查数组中的项是否存在于对象内部