Javascript 应用程序脚本:映射未将预期值返回到数组
我有一个对象数组,看起来像:Javascript 应用程序脚本:映射未将预期值返回到数组,javascript,arrays,google-apps-script,Javascript,Arrays,Google Apps Script,我有一个对象数组,看起来像: var objArray = [ { " #": "4596", " E": "Yes", " Date": "06/12/20", " County": "Los Angeles County", " State": "California", " Acres": "2.49", " Eager": "Low", }, { " #": "4588", " E": "Yes",
var objArray = [
{
" #": "4596",
" E": "Yes",
" Date": "06/12/20",
" County": "Los Angeles County",
" State": "California",
" Acres": "2.49",
" Eager": "Low",
},
{
" #": "4588",
" E": "Yes",
" Date": "06/11/20",
" County": "Towns County",
" State": "Georgia",
" Acres": "3.00",
" Eager": "High",
},
....
];
我试图把一系列的索引组合在一起(“#”)
到目前为止,我已经:
let indexes = objArray.forEach(function (rowObj) {
Object.keys(rowObj).map(function (key) {
if (key.includes("#")) {
var v = rowObj[key];
Logger.log(v); // abc
return v;
}
});
});
Logger.log(indexes); // abc
输出:
[20-06-13 20:43:33:320 EDT] 4547
[20-06-13 20:43:33:324 EDT] 4546
[20-06-13 20:43:33:329 EDT] 4545
[20-06-13 20:43:33:450 EDT] 4543
[20-06-13 20:43:33:453 EDT] 4542
[20-06-13 20:43:33:456 EDT] 4540
[20-06-13 20:43:33:459 EDT] 4538
这产生了:
[20-06-13 20:43:33:462 EDT] null
我做错了什么? < P>我认为你在中间的回归是问题所在。除此之外,一切正常 这对我很有用:
function functest() {
var objArray =[{" #":"4596"," E":"Yes"," Date":"06/12/20"," County":"Los Angeles County"," State":"California"," Acres":"2.49"," Eager":"Low"},
{" #":"4588"," E":"Yes"," Date":"06/11/20"," County":"Towns County"," State":"Georgia"," Acres":"3.00"," Eager":"High"},
{" #":"4596"," E":"Yes"," Date":"06/12/20"," County":"Los Angeles County"," State":"California"," Acres":"2.49"," Eager":"Low"},
{" #":"4588"," E":"Yes"," Date":"06/11/20"," County":"Towns County"," State":"Georgia"," Acres":"3.00"," Eager":"High"},
{" #":"4596"," E":"Yes"," Date":"06/12/20"," County":"Los Angeles County"," State":"California"," Acres":"2.49"," Eager":"Low"},
{" #":"4588"," E":"Yes"," Date":"06/11/20"," County":"Towns County"," State":"Georgia"," Acres":"3.00"," Eager":"High"},
{" #":"4596"," E":"Yes"," Date":"06/12/20"," County":"Los Angeles County"," State":"California"," Acres":"2.49"," Eager":"Low"},
{" #":"4588"," E":"Yes"," Date":"06/11/20"," County":"Towns County"," State":"Georgia"," Acres":"3.00"," Eager":"High"}];
var oA=[];
let indexes=objArray.forEach(function(rowObj) {
Object.keys(rowObj).map(function(key) {
if (key.includes('#') ) {
var v = rowObj[key];
oA.push(v);
}
});
});
Logger.log(oA);
}//[4596, 4588, 4596, 4588, 4596, 4588, 4596, 4588]
作为补充答复: 你可以做得更简单更快
const值=[
{“#”:“4596”,“E”:“是”},
{“#”:“4597”,“E”:“否”},
{“#”:“4598”,“E”:“也许”},
]
const index=values.map({“#“:id})=>id);
控制台日志(索引)代码>如果您要查找的密钥始终是#
,并且如果它存在于所有对象中,则可以使用简化逻辑。请看下面的例子
const objArray=[
{
" #": "4596",
“E”:“是”,
“日期”:“20年12月6日”,
“县”:“洛杉矶县”,
“州”:“加利福尼亚州”,
“英亩”:“2.49”,
“渴望”:“低”,
},
{
" #": "4588",
“E”:“是”,
“日期”:“06/11/20”,
“县”:“乡镇县”,
“州”:“格鲁吉亚”,
“英亩”:“3.00”,
“渴望”:“高”,
},
];
常量输出=objArray.reduce(
(previousValue,currentValue)=>[…previousValue,currentValue[“#”],
[]
);
console.log(output)
我发现使用它查看结果要快得多:SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutput(oA.join(“
”),“Display results”)
这是个好主意,但当我在应用程序脚本中运行它时,我得到:[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],在实际代码中,#
是否以空格作为前缀?你能展示一下你是如何实施这个建议的吗?你必须确保以下几点是正确的:1map
直接在对象数组上调用(objArray
)。2.“#”
键完全由空格和哈希字符组成。3.V8运行时已启用(Mario的答案也是如此,顺便说一句)谢谢-我对js和reduce相当陌生。你能解释一下你在这里做了什么吗?很抱歉,这是一个很好的解释。我很熟悉,以前也使用过reduce,但在您的解释中,它只是一个开始。我不太清楚您使用的函数-(previousValue,currentValue)=>[…previousValue,currentValue[“#”]]-previousValue是累加器吗?我理解。是,前一个值是累加器。关于[…previousValue,currentValue[“#”]
我正在使用扩展语法来扩展新数组中的当前累加器加上属性`#`@LDN中的currentValue的值-[…sourceArray,value]
只是自ES6出现以来对sourceArray.concat([value])
的一种更简洁的方法(请参阅)