разделить последние два слова и отфильтровать в JavaScript - PullRequest
3 голосов
/ 09 апреля 2019

Я хотел бы знать, как фильтровать массив значений с помощью JavaScript Как разделить массивы с помощью «provider-send» и «provider-receive»

 var filterradio = id.filter(function(e){       
       return e.id.split("-")[0] == "provider-send"
    })  
var id=["provider-send-credit-transfer", "provider-send-debit-fund","provider-receive-credit-transfer","provider-receive-debit-fund"]


Expected Output:
result_sn: ["provider-send-credit-transfer", "provider-send-debit-fund"]
result_rcn:["provider-receive-credit-transfer","provider-receive-debit-fund"]

Ответы [ 5 ]

1 голос
/ 09 апреля 2019

Если это всегда будут "provider-receive -..." и "provider-send ...", вы можете сделать следующее, чтобы отделить их

for (i = 0; i < id.length; i++) {
    if (id[i].split("provider-send-").length > 1) {
        result_sn.push(id[i]);
    } else if (id[i].split("provider-receive-").length > 1) {
        result_rcn.push(id[i])
    }
}
0 голосов
/ 09 апреля 2019

Использование .filter() потребует от вас записи 1 фильтра для каждого шаблона, который вы хотите сопоставить, назначенного переменной.

Рекомендуется использовать .reduce(), и его легче расширить для поддержки большего количества шаблонов.

Поначалу это может показаться пугающим, но вы, по сути, используете accumulator в качестве временной переменной, которая сохраняется и переносится на каждую итерацию. И каждая итерация массива даст вам текущее итеративное значение с currentValue.

Я добавил something-else в качестве примера добавления нового шаблона.

var id = [
  "provider-send-credit-transfer",
  "provider-send-debit-fund",
  "provider-receive-credit-transfer",
  "provider-receive-debit-fund",
  "something-else-credit-transfer",
  "something-else-debit-fund"
];

const {
  'provider-send': result_sn,
  'provider-receive': result_rcn,
  'something-else': result_ste
} = id.reduce(function(accumulator, currentValue) {
  let prefix = currentValue.match(/^\w+-\w+/)[0];
  return {...accumulator, [prefix]: (accumulator[prefix] || []).concat(currentValue)}
}, {});

console.log(result_sn);
console.log(result_rcn);
console.log(result_ste);
0 голосов
/ 09 апреля 2019

Попробуйте:

var id = [ "provider-send-credit-transfer", "provider-send-debit-fund","provider-receive-credit-transfer","provider-receive-debit-fund" ] ;

var result_sn = [] , result_rcn = [] ;

for( value of id ) {
  var twoWords = value.split('-',2).join('-') ;
  if ( twoWords === "provider-send" ) 
    result_sn.push( value ) ;
  else if ( twoWords === "provider-receive" )
    result_rcn.push( value ) ;
}

console.log( result_sn ) ;
console.log( result_rcn ) ;
0 голосов
/ 09 апреля 2019

Я предлагаю использовать reduce вместо filter, так как уменьшение используется для уменьшения размера массива в один возвращаемый элемент. Здесь я сокращаю массив до объекта, который имеет два ключа result_sn и result_rcn.

var id = ["provider-send-credit-transfer", "provider-send-debit-fund", "provider-receive-credit-transfer", "provider-receive-debit-fund"]


const result = id.reduce((obj, str) => {
  if (str.match(/^provider-send/g))
    obj['result_sn'].push(str);
  else
    obj['result_rcn'].push(str);
  return obj;
}, {
  'result_sn': [],
  'result_rcn': []
});

console.log(result)
0 голосов
/ 09 апреля 2019

Передайте 2 в качестве второго параметра для split(), а затем снова join() на -.Второй параметр split() указывает максимальное количество элементов в массиве результатов.

var id=["provider-send-credit-transfer", "provider-send-debit-fund","provider-receive-credit-transfer","provider-receive-debit-fund"]

var filterradio = id.filter(function(id){    
    return id.split("-",2).join('-') === "provider-send"
})  
         
 console.log(filterradio)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...