拆分最后两个单词并在javascript中过滤
Posted
技术标签:
【中文标题】拆分最后两个单词并在javascript中过滤【英文标题】:split last two words and filter in 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]
产生了什么
【参考方案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])
【讨论】:
附注:您可以直接使用search
、startsWIth
、includes
、+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过滤任何东西,你应该使用reduce
或for
或forEach
,
@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)
【讨论】:
为什么不使用search
或includes
或startsWIth
而不是split
和join
【参考方案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_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)
【讨论】:
您应该将^
添加到您的正则表达式中,否则它也会匹配some-provider-send
,即使这里不是这种情况,但最好考虑IMO,无论如何+1以上是关于拆分最后两个单词并在javascript中过滤的主要内容,如果未能解决你的问题,请参考以下文章