我的问题是为什么这个函数没有通过它flatMap
的测试。
问题是:
给定一个对象,一个键和一个数字索引," getElementOfArrayProperty"返回位于给定键的给定对象内的数组的给定索引处的元素值。
注意: *如果数组为空,则应返回undefined。
当我传递示例对象时:should return the element at the index of the array at the key of the passed in object
它返回var obj = { key: ['Jamil', 'Albrey'] };
。
我的代码:
"jamil"
但它仍未通过测试
答案 0 :(得分:1)
我认为Nol是对的。问题是key
作为属性/参数和“key”作为字符串文字有点混淆。让我们看看这是否清楚了:
var obj = { foo: ['Jamil', 'Albrey'] };
function getElementOfArrayProperty(obj, key, index) {
if (!obj[key]) return undefined;
return obj[key][index];
}
alert( getElementOfArrayProperty(obj, "foo", 0) );
编辑:如果您想知道为什么"foo"
在引号之间,那是因为它不是变量,它是一个字符串文字,带有对象属性的名称。如果要将变量作为参数传递,首先需要创建它,如:
var bar = obj["foo"]; // or
var bar = obj.foo;
然后你可以在函数调用中使用它:
alert( getElementOfArrayProperty(obj, bar, 0) );
但是在这种情况下,您不需要传递obj
变量,因为bar
已经引用了obj
对象的一个属性:
var obj = { foo: ['Jamil', 'Albrey'] };
var bar = obj.foo;
function getElementOfArrayProperty(key, index) {
if (!key) return undefined;
return key[index];
}
alert(getElementOfArrayProperty(bar, 0));
答案 1 :(得分:0)
我不确定这是否是拼写错误,但在您的代码示例中,您将字符串“key”传递给obj,如obj["key"]
,而不是使用方法中的参数key
定义。使用obj[key]
可能会改善您的结果。
这就是我的意思:
var obj = {
key: ['Jamil', 'Albrey']
};
function getElementOfArrayProperty(obj, key, index) {
if (!obj[key]) {
return undefined;
}
return obj[key][index];
}
function getArrayByKey(obj, key) {
return obj[key];
}
alert(getElementOfArrayProperty(obj, "key", 0) + "\n" + getArrayByKey(obj, "key"));
如果你运行它,你会发现这不会返回undefined,而是像你的硬编码"key"
的例子一样返回Jamil。
如果我只查找obj[key]
,我仍然会得到整个数组对象,所以我似乎无法重现您的问题。