在 observablehq 中,由于其单元格语法与标准 javascript 不同,直接使用 const 声明变量会导致“unexpected token”错误;需采用表达式赋值或立即执行代码块并显式返回结果。
在 observablehq 中,由于其单元格语法与标准 javascript 不同,直接使用 const 声明变量会导致“unexpected token”错误;需采用表达式赋值或立即执行代码块并显式返回结果。
ObservableHQ 的单元格(cell)并非普通 JavaScript 脚本环境,而是基于表达式求值的响应式计算模型。这意味着每个单元格必须是一个可求值的表达式——例如字面量、函数调用、对象字面量,或包含 return 的代码块;而语句(如 const、let、if)单独出现时不构成合法表达式,因此会触发 SyntaxError: Unexpected token。
✅ 正确写法一:直接赋值表达式(推荐)
省略 const,将 map 调用本身作为单元格的返回值:
newArray = sheet.map(obj => ({ Name: obj.Name, reppertota: obj.reppertota, dempertota: obj.dempertota}));
该写法简洁、符合 Observable 惯例,且自动将结果绑定到变量 newArray,后续单元格可直接引用。
✅ 正确写法二:使用大括号代码块 + 显式 return
当需要多步逻辑(如解构、条件处理、日志调试)时,用 {} 包裹语句,并以 return 结束:
{ const newArray = sheet.map(obj => { const { Name, reppertota, dempertota } = obj; return { Name, reppertota, dempertota }; }); return newArray; // ⚠️ 必须有 return!否则单元格值为 undefined}
⚠️ 注意事项:
? 小技巧:也可进一步简化为一行解构返回,兼顾可读性与简洁性:
newArray = sheet.map(({ Name, reppertota, dempertota }) => ({ Name, reppertota, dempertota }));
这利用了箭头函数参数解构 + 隐式返回对象字面量的特性,是 Observable 中高效构建投影数组的标准实践。