如何将数组元素作为对象属性检索

时间:2016-10-28 22:35:39

标签: javascript properties key

我的问题是为什么这个函数没有通过它flatMap的测试。

问题是:

给定一个对象,一个键和一个数字索引," getElementOfArrayProperty"返回位于给定键的给定对象内的数组的给定索引处的元素值。

注意: *如果数组为空,则应返回undefined。

  • 如果给定索引超出位于给定键的数组的范围,则应返回undefined。
  • 如果给定键的属性不是数组,则应返回undefined。
  • 如果密钥没有属性,则应返回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"

但它仍未通过测试

2 个答案:

答案 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],我仍然会得到整个数组对象,所以我似乎无法重现您的问题。