查找最后匹配的索引

时间:2019-12-18 12:04:25

标签: javascript typescript

我有variables数组和下一个要按字母顺序添加的变量。它从A到Z,然后是AA,AB,AC等。 因此,当下一个变量为E时,我想将其添加到长度为1的字母的末尾,如果下一个变量为AC,则将其添加到长度为2的字母的末尾。等等。我尝试使用findIndex进行操作,但是它返回第一个匹配项,而不是最后一个匹配项,并且lastIndexOf接受值,而在我的情况下,它应该是具有给定长度的最后一个元素。

let variables = ['A', 'B', 'C', 'D', 'AA', 'AB'];
const nextVariable = 'E';
const idx = variables.findIndex(x => x.length === nextVariable.length);
variables.splice(idx, 0, nextVariable);
console.log(variables);

// should be ['A', 'B', 'C', 'D', 'E', 'AA', 'AB']

3 个答案:

答案 0 :(得分:1)

您可以使用自定义排序功能并测试每个值的字母顺序和长度。

library(plyr)
dfs <- split(df,df$mom)
lst <- lapply(dfs, function(x) {
  x <- within(x,seqnum <- ave(id_num,mom,FUN = seq_along))
  reshape(x, idvar = "mom", timevar = "seqnum", direction = "wide")
}
)
dfout <- rbind.fill(lst)

您可以在添加新值后使用此函数对数组进行排序:

function mySort(a, b) { if(a.length == b.length) { return a.localeCompare(b); } else { return a.length - b.length; } }

答案 1 :(得分:1)

您只需查找比要插入的变量长 的第一个变量,如果该变量不存在(findIndex返回-1),则将其添加到数组:

let variables = ['A', 'B', 'C', 'D', 'AA', 'AB'];
let nextVariable = 'E';
let idx = variables.findIndex(x => x.length > nextVariable.length);
variables.splice(idx < 0 ? variables.length : idx, 0, nextVariable);
// should be ['A', 'B', 'C', 'D', 'E', 'AA', 'AB']
console.log(variables);
nextVariable = 'AC';
idx = variables.findIndex(x => x.length > nextVariable.length);
variables.splice(idx < 0 ? variables.length : idx, 0, nextVariable);
// should be ['A', 'B', 'C', 'D', 'E', 'AA', 'AB', 'AC']
console.log(variables);

答案 2 :(得分:1)

let variables = ['A', 'B', 'C', 'D', 'AA', 'AB'];
const nextVariable = 'E';
variables[variables.length] = nextVariable
variables = variables.sort((x,y) => x.length<y.length ? -1 : x.length==y.length ? x.localeCompare(y) : 1)
console.log(variables);