我试图想出一个更简洁的方法,基本上循环一个对象,如果name匹配关键字do soemthing或者如果找不到匹配则执行其他操作。
var obj = {
0: {
name: 'test'
},
1: {
name: 'test2'
},
2: {
name: 'test3'
},
3: {
name: 'test4'
}
};
var len = (Object.keys(obj).length - 1);
var valuetomatch = 'test2';
while (len > -1) {
if (obj[len].name === valuetomatch) {
alert('match: ' + obj[len].name);
break;
} else if (len === 0) {
alert('no match found!');
}
len -= 1;
}
答案 0 :(得分:4)
如果您确定,可以使用Array#some()
只搜索一个项目。
var obj = { 0: { name: 'test' }, 1: { name: 'test2' }, 2: { name: 'test3' }, 3: { name: 'test4' } },
valuetomatch = 'test2',
found = Object.keys(obj).some(function (k) {
if (obj[k].name === valuetomatch) {
// do something
return true;
}
});
document.write(found);
答案 1 :(得分:0)
这是在对象中搜索所需项目的另一种方法。
var obj = {
0: {
name: 'test'
},
1: {
name: 'test2'
},
2: {
name: 'test3'
},
3: {
name: 'test4'
}
};
var len = Object.keys(obj).length;
var valuetomatch = 'test2';
var flag=false;
for(i=0;i<len;i++){
if(obj[i]["name"]==valuetomatch){
flag=true;
alert(valuetomatch+" is found");
}
}
if(flag===false)
alert(valuetomatch+" is not found");
答案 2 :(得分:0)
使用Array#forEach
方法而不是while循环使其更简单:
var obj = {
0: {
name: 'test'
},
1: {
name: 'test2'
},
2: {
name: 'test3'
},
3: {
name: 'test4'
}
};
var valuetomatch = 'test2';
var match;
Object.keys(obj).forEach(function(key) {
if (obj[key].name === valuetomatch) {
match = true;
}
});
if (match) {
alert('match: ' + valuetomatch);
} else {
alert('no match found!');
}
答案 3 :(得分:0)
您可以使用for..in
循环来迭代对象
var obj = { 0: { name: 'test' }, 1: { name: 'test2' }, 2: { name: 'test3' }, 3: { name: 'test4' } };
var valuetomatch = 'test2';
var matched = false;
for(var v in obj) {
if(obj.hasOwnProperty(v) && obj[v].name == valuetomatch) {
alert('match: ' + obj[v].name);
matched = true;
break;
}
}
if (!matched) {
alert('no match found!');
}
答案 4 :(得分:0)
我已经将上面的解决方案中的isvforall重新考虑到一个函数中,您可以将其重用于具有类似结构的其他嵌套对象。 toMatch(obj,prop,value)有3个参数:obj(你正在遍历的对象),prop(你要过滤的属性)和value(你正在搜索匹配的值)。可以根据数据结构进一步重新考虑。
var obj1 = {
0: {
name: 'test'
},
1: {
name: 'test2'
},
2: {
name: 'test3'
},
3: {
name: 'test4'
}
};
var toMatch = function(obj, prop, value) {
var foundMatch = false;
for (var key in obj) {
if (obj.hasOwnProperty(key) && obj[key][prop] === value) {
alert('Found match! ' + value + ' is found at key ' + key);
foundMatch = true;
break;
}
}
if (!foundMatch) {
alert('no match found!');
}
};
toMatch(obj1, 'name', 'test2');
// => Found match! test2 is found at key 1