循环对象以检查特定 属性 是否存在,有没有更好的方法可能使用下划线?
Looping objects to check if specific property exists, is there a nicer way maybe using underscore?
我有一个对象数组,想检查是否存在特定的 key/value,我目前正在使用 for..in 循环,但想知道是否有 shorter/better 方法来这样做?
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');
}
你可以使用下划线的some函数:
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;});
}
(也可以在没有函数的情况下使用,因为你不需要循环)
如果arrow functions得到广泛的支持,可读性会更好;)那么你可以使用models.some(e => e.name===name)
下面是带下划线的解决方案
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');
}
不依赖外部库,Array.filter()
完成工作:
models.filter( (x) => x.name==="Jason" )
Array.find()
找到第一次出现并停止,因此速度更快。
我有一个对象数组,想检查是否存在特定的 key/value,我目前正在使用 for..in 循环,但想知道是否有 shorter/better 方法来这样做?
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');
}
你可以使用下划线的some函数:
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;});
}
(也可以在没有函数的情况下使用,因为你不需要循环)
如果arrow functions得到广泛的支持,可读性会更好;)那么你可以使用models.some(e => e.name===name)
下面是带下划线的解决方案
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');
}
不依赖外部库,Array.filter()
完成工作:
models.filter( (x) => x.name==="Jason" )
Array.find()
找到第一次出现并停止,因此速度更快。