【问题标题】:split last two words and filter in javascript拆分最后两个单词并在javascript中过滤
【发布时间】:2019-08-30 05:24:56
【问题描述】:

我想知道如何使用 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"]

【问题讨论】:

  • 如果您在 - 上拆分,则没有一个元素包含其中。看看e.id.split("-")[0] 产生了什么

标签: javascript jquery arrays string object


【解决方案1】:

如果总是“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])
    }
}

【讨论】:

  • 附注:您可以直接使用searchstartsWIthincludes、+1 搜索此值,而不是拆分。
【解决方案2】:

试试这个:

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

【讨论】:

  • 你没有正确使用filter,因为你没有从id过滤任何东西,你应该使用reduceforforEach
  • @CodeManiac ,嗨,我的朋友,请查看更新后的帖子。谢谢
【解决方案3】:

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)

【讨论】:

  • 为什么不使用searchincludesstartsWIth 而不是splitjoin
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    我建议使用reduce 而不是filter,因为reduce 用于将数组大小减小为单个返回元素。 在这里,我将数组缩减为一个具有两个键 result_snresult_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)

    【讨论】:

    • 您应该将^ 添加到您的正则表达式中,否则它也会匹配some-provider-send,即使这里不是这种情况,但最好考虑IMO,无论如何+1
    猜你喜欢
    • 2017-07-26
    • 2015-12-27
    • 2019-01-11
    • 2017-02-27
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多