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



在应用程序脚本中我有:

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

但这很难,认真。

最新更新