javascript - 如何从 Google 表格中的列值分配对象?

标签 javascript google-apps-script google-sheets arrow-functions

我有一个 google 表格,其中一列包含一些数据。 如何将这些值分配给新对象,例如 {'value[0]':value[0], 'value[1]':value[1],..., 'value[i]':value[我]}?

我写了这个脚本,但它仅从 names 的最后一个值分配对:

function getIngredientsList() {
  const url = "SPREADSHEET_URL";
  const ss = SpreadsheetApp.openByUrl(url);
  const ws = ss.getSheetByName('Base');
  const names = ws.getRange(2, 3, ws.getLastRow() - 1).getValues().map(a => a[0]);
  let nameList;
  for (let i = 0; i < names.length; i++){
    if (names[i] !== ""){
      let name = {[names[i]]:names[i]};
      nameList = Object.assign(name);
    }    
  } 
  return nameList;
}

我哪里错了,如何改正?

最佳答案

我相信你的目标如下。

  • 您想从单元格“C2:C28”中检索值,并希望创建一个键和值相同的对象。

为此,这个修改怎么样? Object.assign() 的参数是 Object.assign(target, ...sources)。所以在你的脚本中,let nameList = {}nameList需要像nameList = Object.assign(nameList, name)一样使用。

来自:

let nameList;
for (let i = 0; i < names.length; i++){
  if (names[i] !== ""){
    let name = {[names[i]]:names[i]};
    nameList = Object.assign(name);
  }    
}

收件人:

let nameList = {};  // Modified
for (let i = 0; i < names.length; i++){
  if (names[i] !== ""){
    let name = {[names[i]]:names[i]};
    nameList = Object.assign(nameList, name);  // Modified
  }
}

或者,与其他模式一样,当使用reduce 时,以下脚本也可以返回与上述修改后的脚本相同的值。

const nameList = ws.getRange(2, 3, ws.getLastRow() - 1).getValues()
.reduce((o, [e]) => {
  if (e != "") Object.assign(o, {[e]: e});
  return o;
}, {});

引用:

关于javascript - 如何从 Google 表格中的列值分配对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62099062/

相关文章:

javascript - 当鼠标悬停在链接上时隐藏 href url 中的状态栏值

javascript - 如何检索输入框中的值以用于我的函数?

javascript - 在运行时使用 GAS 调整 HTML 模态的大小

arrays - 将数组分配给范围时无法转换错误

javascript - 在 JavaScript 中,从数组中删除 "bad"值的最有效方法是什么?

javascript - 无尽的选框

javascript - 如何在 Google Apps 脚本/Javascript 中过滤数组以仅精确匹配

javascript - 复选框违反数据验证规则

javascript - Google Apps 脚本 - 以字符串形式发送电子邮件

google-sheets - 如何将 =ARRAYFORMULA() 应用于 Google 表格中的反向编号列表?