Сценарий приложения: неверное назначение слева - PullRequest
0 голосов
/ 09 марта 2019

в скрипте приложений у меня есть:

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 ]

2 голосов
/ 09 марта 2019

Вы можете изменить свой код, как показано ниже.

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)
1 голос
/ 09 марта 2019

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

Но это ужасно, серьезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...