在我的应用脚本中:
var conversations = [R: test1 , R: test3 , tx , I sent ]
我想获取包含'R:'的元素的列表,所以我尝试了
var out = conversations.reduce(function (ar, m) {
m.indexOf('R:')!== -1 && ar.push(m);
return ar;
}, []);
工作和生产的东西
[R: test1 , R: test3 ]
接下来,我尝试获取包含'R:'的数组的最后一个元素
R: test3
我将代码更改为:
var out = conversations.reduce(function (ar, m) {
m.indexOf('R:')!== -1 && ar=m;
return ar;
}, "");
Logger.log(out);
但是现在我无法保存函数,并且标题中出现错误。是否可以仅将最后一个元素保存在累加器中?我应该吗?
答案 0 :(得分:2)
您可以像下面那样更改代码。
autouse
但是我将在这种情况下使用过滤器,并从过滤后的值中获取最后一个元素
var conversations = ['R: test1' , 'R: test3' , 'tx' , 'I sent' ]
var out = conversations.reduce(function (ar, m) {
if(m.indexOf('R:')!== -1){
ar = m
}
return ar;
}, "");
console.log(out)
答案 1 :(得分:1)
.reduce
是错误的工具,请使用.find
:
const out = conversations.slice().reverse().find(it => it.includes("R:")) || "";
或者您可以实现自己的findLast
:
function findLast(array, predicate) {
for(let i = array.length - 1; i >= 0; i--)
if(predicate(array[i], i, array)) return array[i];
}
//...
const out = findLast(conversations, it => it.includes("R:"));
如果您只想消除错误,请添加方括号以区别其他部分:
m.indexOf('R:')!== -1 && (ar=m);
但这很丑陋,认真。