Node.js: forEach 箭头语句剧

Node.js: forEach arrow statement drama

我正在尝试让下面的代码片段正常工作,但出于某种原因,我无法让脚本识别 "attributes.States.element" 行的 "element" 部分。
是不是因为有个“.”在行?

如果我要制作 forEach 部分的第一行 "console.log(element);",它会完美地工作。

如果我按照下面的方式使用它,它会无法识别 "element"。
此代码段用于 Node.js 8.10 中的一项 Alexa 技能。

** 编辑以在 Alexa 代码中包含整个 Handler 语句。

如有任何帮助,我们将不胜感激!

const HelloWorldIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
            && Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent';
    },
    async handle(handlerInput) {
        const attributesManager = handlerInput.attributesManager;

        const attributes = await attributesManager.getPersistentAttributes() || {};

        const speakOutput = 'Hello World!';

        attributes.States = { 
        };

        const stateNames = ['Alabama', 'New York'];

        stateNames.forEach(element => {
            attributes.States.element = {
                'found' : 'no',
                'history' : 'no'
            };
        });
        attributesManager.setPersistentAttributes(attributes);
        await attributesManager.savePersistentAttributes();

        return handlerInput.responseBuilder
            .speak(speakOutput)
            //.reprompt('add a reprompt if you want to keep the session open for the user to respond')
            .getResponse();
    }
};

如果您希望在 attributes.States 中引用名为 'Alabama' 或 'New York' 的 属性,那么您应该使用 attributes.States[element].

此处的区别在于 element 被用作值而不是 属性 名称。

const HelloWorldIntentHandler = {
  canHandle(handlerInput) {
    return (
      Alexa.getRequestType(handlerInput.requestEnvelope) === "IntentRequest" &&
      Alexa.getIntentName(handlerInput.requestEnvelope) === "HelloWorldIntent"
    );
  },
  async handle(handlerInput) {
    const attributesManager = handlerInput.attributesManager;

    const attributes =
      (await attributesManager.getPersistentAttributes()) || {};

    const speakOutput = "Hello World!";
    // Add the following condition to avoid changing the data if something is returned from the getPersistentAttributes()
    if (!attributes.States) {
      attributes.States = {};
    }
    const stateNames = ["Alabama", "New York"];

    stateNames.forEach(element => {
      attributes.States[element] = {
        found: "no",
        history: "no"
      };
    });
    attributesManager.setPersistentAttributes(attributes);
    await attributesManager.savePersistentAttributes();

    return (
      handlerInput.responseBuilder
        .speak(speakOutput)
        //.reprompt('add a reprompt if you want to keep the session open for the user to respond')
        .getResponse()
    );
  }
};