2017-04-20 71 views
0

我想基于一个键返回一个值的数组。我试图返回的值取决于用户输入的键。但是,当我遍历我的for循环时,出现错误:TypeError: Cannot read property 'length' of undefined。我究竟做错了什么?访问javascript对象内的数组

var obj = { 
    14: ['abc', 'def', 'gh', 'i', 'k'], 
    90: ['asdf','xxc' , 'd'], 
    92: ['def', 'dr' , 'vvd', 'off'] 
} 

exports.function(key) = { 
    var temp = {}; 
    for(var i = 0; i < obj.key.length; i++){ 
     temp[i] = obj.key[i]; 
    } 
    return temp; 
}; 
+2

可能的复制(http://stackoverflow.com/ question/8312459/iterate-through-object-properties) – Andreas

+0

'object.key'正在寻找一个真正称为'key'的属性。尝试使用'obj [key]'而不是 –

+0

键取决于用户输入,我如何在这种情况下访问数组值@KieranE – learningToCode

回答

0

如果我理解正确的:

var obj = { 
    14: ['abc', 'def', 'gh', 'i', 'k'], 
    90: ['asdf','xxc' , 'd'], 
    92: ['def', 'dr' , 'vvd', 'off'] 
} 

function test(key) = { 
    return obj[key]; 
}; 


test(14) //returns ['abc', 'def', 'gh', 'i', 'k'] 
test(92) //returns ['def', 'dr' , 'vvd', 'off'] 
+1

@OP这个人肯定是在我之前。但事实确实如此简单。 –

1

就像我说在我的评论,object.key正在寻找字面上叫key的属性。如果要访问由用户输入定义的属性,则必须使用[]语法。在你的情况下,[key]

尝试这种情况:

exports.function(key) = { 
    return obj[key]; 
}; 

或者,在SNIPPIT形式,

var obj = { 
 
    14: ['abc', 'def', 'gh', 'i', 'k'], 
 
    90: ['asdf','xxc' , 'd'], 
 
    92: ['def', 'dr' , 'vvd', 'off'] 
 
}; 
 

 
function getKey(key){ 
 
    return obj[key]; 
 
} 
 

 
console.log(getKey(14)) 
 
console.log(getKey(92))

[通过对象属性迭代]的
+0

对,nvm我以前的评论这是正确的方法来做到这一点 – learningToCode