应用程序脚本:左侧的分配无效

时间:2019-03-09 16:48:47

标签: javascript google-apps-script

在我的应用脚本中:

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);

但是现在我无法保存函数,并且标题中出现错误。是否可以仅将最后一个元素保存在累加器中?我应该吗?

2 个答案:

答案 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);

但这很丑陋,认真。