我有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']
答案 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);