循环对象来检查特定属性是否存在,有没有更好的方法,比如使用下划线
Looping objects to check if specific property exists, is there a nicer way maybe using underscore?
我有一个对象数组,想检查是否存在一个特定的键/值,我目前正在使用for..in循环,但想知道是否有更短/更好的方法来做到这一点?
JS
var models = [
{
"id": 1,
"name": "James"
},
{
"id": 2,
"name": "Ken"
},
{
"id": 3,
"name": "Jason"
}
];
function checkNameExists(name) {
for( var model in models ) {
if (models[model].name === name) {
return true;
}
}
}
var nameExists = checkNameExists("Ken");
if(nameExists) {
console.log('Name exists');
}
JSFiddle: http://jsfiddle.net/kyllle/c21opmj8/1/
你可以使用下划线的一些函数:
var nameExists = _.some(models, function (elem) {
return elem.name == "Jason"
})
或Ahmad Mageed建议的简短版本:
var useFound = _.some(models,{ 'name': 'Jasonn' });
这是一个JSFiddle: http://jsfiddle.net/c21opmj8/2/
在普通情况下,您可以在任何数组上使用some
function checkNameExists(name) {
return models.some(function(e){return e.name===name;});
}
(也可以不使用该函数,因为您不需要循环)
如果箭头函数得到广泛的支持,可读性会更好;)然后你可以使用models.some(e => e.name===name)
不依赖于外部库,Array.filter()
完成工作:
models.filter( (x) => x.name==="Jason" )
Array.find()
发现第一次出现并停止,因此速度更快。
这里有一个下划线
的解决方案console.clear();
var models = [
{
"id": 1,
"name": "James"
},
{
"id": 2,
"name": "Ken"
},
{
"id": 3,
"name": "Jason"
}
];
var tab_name = _.map(models, function(x){return x.name});
var name_exists = _.contains( tab_name , 'Ken')
if( name_exists ) {
console.log('Name exists');
}
相关文章:
- 有没有更好的动手、具体的方法来学习Javascript
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 在JavaScript中拆分日期字符串的更好方法是什么
- 设置嵌套对象属性的更好方法
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 将数组从javascript格式化为php的更好方法,反之亦然
- jquery:将动画绑定到滚动条位置的更好方法
- 有更好的方法吗?(递归解析HTML unicode实体)
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 编写if-else语句的更好方法
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- 有没有更好的方法将音频与视频同步(只需将其放在视频中即可)
- 调用影子原型方法的更简单/更好的方法
- 有没有更好的方法来编写这个Show/hide JQuery代码
- AngularJS:有没有比指定的方法更好的方法来实现这一点
- 哪种验证方法更好
- 哪一种定义变量的方法更好?为什么?