我解决了挑战16 没有问题。我也找到了挑战17 的答案,但我不明白为什么我只能使用方括号将属性添加到这样的对象中:loopNumbers[nestedArr[i][0]] = nestedArr[i][1]
所以,我的问题是:
loopNumbers.nestedArr[i][0] = nestedArr[i][1]
Type Error on line 120: Cannot read property '0' of undefined
loopNumbers[nestedArr[i][0]] = nestedArr[i][1]
之后加分号?以下是挑战。
挑战16
您将获得一个名为
nestedArr
的空数组。使用for循环,将5个子数组添加到nestedArr
,每个嵌套数组包含字符串' loop'与nestedArr
中的相应索引连接,作为它的第一个元素,并且只是索引作为它的第二个元素。子阵列示例 -['loop3', 3]
My answer:
let nestedArr = [];
for(let i=0; i<5; i++){
nestedArr.push(['loop'+i, i]);
}
console.log(nestedArr);
挑战17
创建一个名为
loopNumbers
的变量,并将其初始化为空对象文字。使用for循环,迭代前一个挑战中的nestedArr
。对于循环的每次迭代,将新属性分配给loopNumbers
,其中属性名称是nestedArr
中每个嵌套数组中的第一个元素,值是第二个元素。
My answer:
let loopNumbers = {};
for (let i = 0; i < nestedArr.length; i++) {
loopNumbers[nestedArr[i][0]] = nestedArr[i][1]
}
console.log(loopNumbers);
答案 0 :(得分:0)
分号在javascript中是可选的,但建议始终添加它们以避免在几种情况下出现歧义(请参阅this post)。
对于添加属性,如果参数是静态的,则可以使用dot,如:
loopnumbers.myproperty = 3
但由于nestedArr[i][0]
不是静态的,你需要放括号。
答案 1 :(得分:0)
在js
中,数组的访问权限为“index
array
的{{1}}”:
array[index]
和对象被访问为“从property
获取名为object
的属性”:
object.property
object["property"]
您要做的是“从object
的条目index
命名的array
获取属性”。这是你可以做的事情。但你实际上做的是要求一些不同的东西。
loopNumbers.nestedArr[i][0]
表示“来自对象nestedArr
的get property loopNumbers
以及来自索引i
的get条目以及来自index的get条目0
。
要获取loopNumbers
的属性,该属性由nestedArr的0
条目的i
条目命名,您必须首先获取i
输入nestedArr
nestedArr[i]
然后你想要输入0
nestedArr[i][0]
现在这不是你可以直接使用的属性,因为正如loopNumbers.nestedArr
之前所说的那样试图从对象nestedArr
获取一个名为loopNumbers
的属性,该属性不存在。从名为nestedArr[i][0]
的对象中获取loopNumbers
中存储的值命名的属性的唯一方法是使用方括号
loopNumbers[nestedArr[i][0]]