Как назначить объект из значений столбца в Google Sheet? - PullRequest
2 голосов
/ 30 мая 2020

У меня есть таблица Google с некоторыми данными в единственном столбце. Как присвоить эти значения новому объекту, например {'value[0]':value[0], 'value[1]':value[1],..., 'value[i]':value[i]}?

Я написал этот скрипт, но он назначает пару только из последнего значения 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;
}

Где я неправильно и как исправить?

Ответы [ 2 ]

3 голосов
/ 30 мая 2020

Я считаю, что ваша цель следующая.

  • Вы хотите получить значения из ячеек «C2: C28» и хотите создать объект, ключ и значение которого совпадают.

Для этого как с этой модификацией? Аргументы Object.assign(): Object.assign(target, ...sources). Таким образом, в вашем скрипте требуется использовать nameList из let nameList = {} как nameList = Object.assign(nameList, name).

From:

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

To:

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;
}, {});

Ссылка:

1 голос
/ 30 мая 2020

Более чистый способ сделать это - использовать метод reduce:

var names = ['ABC', 'XYZ', 'PQR'];
var result = names.reduce((acc, elem)=>{
    acc[elem] = elem;
    return acc;
},{});

console.log(result);
...