javascript - 在对象中获取 google sheet 行和列的二维值
问题描述
嗨,我正在尝试获取第一行和第二行的值,然后将它们添加到对象中,尽管我已将其编码如下
function getTime(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var d = {}
var quantity = ss.getRange(2,4,2,24).getDisplayValues();
var fruit = ss.getRange(3,4,3,24).getValues();
var quantity = quantity[0].filter(item => item);
var fruit = fruit[0].filter(item => item);
for (let i = 0; i < quantity.length; i++) {
for (let j = 0; j < fruit.length; i++){
d[quantity[i]] = fruit[j]
}
}
但我不喜欢这种方法(其次,这个for循环卡住了)所以我想更加自动化,这样可以减少数据中的错误
我需要的是这样的对象
{
"Apple": 23,
"Banana" 25,
"Apple": 30,
"Grapes": "No value",
"Apple": 31
}
是否可以像下面的方法一样对其进行编码
dic = {}
for quantity,fruit in zip(ss.getRange(2,4,2,24).getDisplayValues(), ss.getRange(3,4,3,24).getValues()):
dic[fruit] = key
上述方法在 python 中,但对于应用程序脚本,我需要将其转换为 javascript。
解决方案
根据您的 Python 代码,我假设您正在努力做到这一点:
var d = {};
var fruit = ["Apple", "Banana", "Apple", "Grapes", "Apple"];
var quantity = [23, 25, 30, "No value", 31];
fruit.forEach((f,q) => d[f] = quantity[q]); // <-- the JS magic is here
console.log(d);
更新
如果您需要总结所有现有的键(水果),方法是:
var d = {};
var fruit = ["Apple", "Banana", "Apple", "Grapes", "Apple"];
var quantity = [23, 25, 30, "No value", 31];
fruit.forEach((f,q) => d[f] = d[f] ? d[f] + quantity[q] : quantity[q]);
console.log(d)
直接翻译成 Python 看起来像这样:
d = {}
fruits = ["Apple", "Banana", "Apple", "Grapes", "Apple"]
quantity = [23, 25, 30, "No value", 31]
for f,q in zip(fruits,quantity):
try: d[f] += q
except: d[f] = q
print(d) # output: {'Apple': 84, 'Banana': 25, 'Grapes': 'No value'}
并且可能您需要以某种方式处理“无价值”值。在这个简单的实现中,它们可能是错误的来源。
以防万一。这是处理“无价值”值的方法之一:
var s = ['No value', 'No value25', 25, '10', ''];
const get_num = s => s = (s == 'No value') ? s : +s.toString().replace(/\D+/g,'');
console.log(s.map(x => get_num(x))); // output: [ 'No value', 25, 25, 10, 0 ]
推荐阅读
- autodesk-forge - 在 userFunction 中使用 getBulkProperties2 来提高性能
- python - [Selenium 4.0.0-beta-1]:如何在 CDP 中添加事件监听器
- r - 比较列以检查它们是否相同或不同
- docker - Docker - 在容器内部和外部使用相同的 URL
- windows - Windows HTTP GET 作为网络浏览器
- callback - 我可以安排一个 Twilio 作业来对我的后端进行 API 调用吗?
- visual-studio - 添加 Identity Server 身份验证后无法访问该站点
- python - Python:并行运行 2 个进程,然后等待所有进程超时
- sql - 如何从 Spring Boot 中的双向表关系生成 DTO
- python - 如何解决“Jupyter notebook 内核错误”?