的JavaScript。将数组添加到对象

时间:2018-05-08 22:07:11

标签: javascript arrays object

我解决了挑战16 没有问题。我也找到了挑战17 的答案,但我不明白为什么我只能使用方括号将属性添加到这样的对象中:loopNumbers[nestedArr[i][0]] = nestedArr[i][1]

所以,我的问题是:

  1. 为什么我不能这样使用点符号?:loopNumbers.nestedArr[i][0] = nestedArr[i][1]
    如果我使用点表示法,那么它会显示Type Error on line 120: Cannot read property '0' of undefined
  2. 为什么我不需要在代码行loopNumbers[nestedArr[i][0]] = nestedArr[i][1]之后加分号?
  3.   

    以下是挑战。

    挑战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);
    

2 个答案:

答案 0 :(得分:0)

分号在javascript中是可选的,但建议始终添加它们以避免在几种情况下出现歧义(请参阅this post)。

对于添加属性,如果参数是静态的,则可以使用dot,如:

loopnumbers.myproperty = 3

但由于nestedArr[i][0]不是静态的,你需要放括号。

答案 1 :(得分:0)

编辑:多次使用“get”时更多的是“访问”或“考虑”。所以是的,我说的是“得到这个东西”而我并不一定意味着读它的价值,而是“我们在这里做点什么”。只是滚动它好吗?

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]]