如何从 Google Sheet 中的列值分配对象?
How to assign an object from column values in Google Sheet?
我有一个 google sheet,在一个列中有一些数据。
如何将这些值分配给新对象,如 {'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;
}
我哪里错了,如何改正?
我相信你的目标如下。
- 您想从单元格 "C2:C28" 中检索值,并想创建一个键和值相同的对象。
为此,这个修改怎么样? Object.assign()
的参数是 Object.assign(target, ...sources)
。因此,在您的脚本中,需要像 nameList = Object.assign(nameList, name)
.
那样使用 let nameList = {}
的 nameList
发件人:
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
时,下面的脚本也可以return与上面修改后的脚本相同的值。
const nameList = ws.getRange(2, 3, ws.getLastRow() - 1).getValues()
.reduce((o, [e]) => {
if (e != "") Object.assign(o, {[e]: e});
return o;
}, {});
参考:
更简洁的方法是使用 reduce
方法:
var names = ['ABC', 'XYZ', 'PQR'];
var result = names.reduce((acc, elem)=>{
acc[elem] = elem;
return acc;
},{});
console.log(result);
我有一个 google sheet,在一个列中有一些数据。
如何将这些值分配给新对象,如 {'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;
}
我哪里错了,如何改正?
我相信你的目标如下。
- 您想从单元格 "C2:C28" 中检索值,并想创建一个键和值相同的对象。
为此,这个修改怎么样? Object.assign()
的参数是 Object.assign(target, ...sources)
。因此,在您的脚本中,需要像 nameList = Object.assign(nameList, name)
.
let nameList = {}
的 nameList
发件人:
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
时,下面的脚本也可以return与上面修改后的脚本相同的值。
const nameList = ws.getRange(2, 3, ws.getLastRow() - 1).getValues()
.reduce((o, [e]) => {
if (e != "") Object.assign(o, {[e]: e});
return o;
}, {});
参考:
更简洁的方法是使用 reduce
方法:
var names = ['ABC', 'XYZ', 'PQR'];
var result = names.reduce((acc, elem)=>{
acc[elem] = elem;
return acc;
},{});
console.log(result);