对不起,我是JS的新手;我有一个对象数组;如何获取具有键" user_key3"的对象的名称?并且显然没有循环而且有条件。
arr = [{
"name": "user1",
"key": "user_key1"
},{
"name": "user3",
"key": "user_key3"
},{
"name": "user2",
"key": "user_key2"
}]
如果您需要更多说明,请告诉我
由于
答案 0 :(得分:2)
您必须迭代并检查密钥
var user_name;
for (var i=0; i<arr.length; i++) {
if ( arr[i].key === 'user_key3' ) {
user_name = arr[i].name;
break;
}
}
您已编辑了要包含的问题
显然没有循环并且有条件
但是循环和条件是迄今为止最有效和跨浏览器的方式,所以为什么你&#34;显然&#34;不想要这个?
答案 1 :(得分:2)
你可以通过功能方式来实现,就像这样
var name;
arr.forEach(function(currentObject) {
if (currentObject.key === "user_key3") {
name = currentObject.name;
}
});
如果你想在第一场比赛中短路,你可以使用Array.prototype.some
,就像这样
var name;
arr.some(function(currentObject) {
if (currentObject.key === "user_key3") {
name = currentObject.name;
return true;
}
return false;
});
答案 2 :(得分:2)
OP提到显然没有循环且有条件。我会这样做:
arr = [{
"name": "user1",
"key": "user_key1"
},{
"name": "user3",
"key": "user_key3"
},{
"name": "user2",
"key": "user_key2"
}];
var keyValMap = arr.map(function(n) { return n.key } );
var arrIndex = keyValMap.indexOf('user_key3');
alert(arr[arrIndex].name);
<强> Fiddle 强>
答案 3 :(得分:1)
低效而简洁的解决方案
var keyarr = arr.map(function(x) { return x.key } );
//keyarr is list of keys
var index=keyarr.indexOf("user_key3");
//arr[index] is your answer. Index will be -1 if the key doesn't exist
答案 4 :(得分:1)
通常,查找满足数组中某些任意属性的项需要您遍历数组:
function find(arr, name) {
for (var i=0; i<arr.length; i++) {
if ( arr[i].key === name ) {
return arr[i];
}
}
}
然后找到它,
var obj = find(arr, 'user_key3');
使用更多功能性解决方案来查找项目也很好,但您仍然会以某种方式循环。
但是,如果按键进行查找,则键值对数组不是最佳数据结构。我建议直接使用一个对象:
var map = {
'user_key1': 'user1',
'user_key2': 'user2',
'user_key3': 'user3'
}
然后查找就是:
map['user_key3'];
答案 5 :(得分:1)
答案 6 :(得分:1)
你不能用Javascript中的对象做这样的事情。虽然在这里你有回调和循环的组合:
arr = [{
"name": "user1",
"key": "user_key1"
},{
"name": "user3",
"key": "user_key3"
},{
"name": "user2",
"key": "user_key2"
}];
arr.forEach(function(elme){
for(var g in elme)
{
if(elme[g] == 'user_key3')
{
console.log("Found the value: "+g+" : "+elme[g]);
};
}
});