在应用程序脚本中我有:
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);
但是现在我无法保存该功能,并且我在标题中获得了错误。是否可以将最后一个元素保存在累加器中?我应该?
您可以像下面更改代码。
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)
,但是在这种情况下,我将使用过滤器,并从过滤值中获取最后一个元素
var conversations = ['R: test1' , 'R: test3' , 'tx' , 'I sent' ]
var out = conversations.filter(function(m){
return m.indexOf('R:')!== -1
}).splice(-1)
console.log(out)
.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);
但这很难,认真。