JavaScript-通过在不同位置组合其他字符串来创建字符串
假设我有3个字符串:s1=ab,s2=cd,s3=ef 目标是通过组合s1、s2和s3来创建另一个字符串。关键在于用户可以决定这3个字符串的位置。例如: s1-位置3 s2-位置2 s3-位置1 结果: efcdab 我的问题是,解决这个问题的最好方法是什么?我的解决方案是创建3个对象,每个对象都将字符串位置和值作为属性,将对象添加到和数组中,然后使用每个对象的位置属性对数组进行排序,但我感觉有更好的解决方案。JavaScript-通过在不同位置组合其他字符串来创建字符串,javascript,string,Javascript,String,假设我有3个字符串:s1=ab,s2=cd,s3=ef 目标是通过组合s1、s2和s3来创建另一个字符串。关键在于用户可以决定这3个字符串的位置。例如: s1-位置3 s2-位置2 s3-位置1 结果: efcdab 我的问题是,解决这个问题的最好方法是什么?我的解决方案是创建3个对象,每个对象都将字符串位置和值作为属性,将对象添加到和数组中,然后使用每个对象的位置属性对数组进行排序,但我感觉有更好的解决方案。 提前谢谢 您可以使用两个对象。一个有字符串和值的,比如 我们可以说,像这样定位物体
提前谢谢 您可以使用两个对象。一个有字符串和值的,比如 我们可以说,像这样定位物体
{
p1: 'store user entry for position1',
p2: 'store user entry for position2',
p3: 'store user entry for position3'
}
并访问第一个对象,如值[position['p1']]添加到值[position['p2']]等等,只需尝试一下,其中strPos是用于排序字符串的用户定义对象 变量s1='ab'; var s2='cd'; var s3=‘ef’; var strs={s1:s1,s2:s2,s3:s3}; var strPos={1:'s1',2:'s3',3:'s2'}; var-fin=;
forvar i=1;i如果字符串和位置以{value,position}对象数组的形式给出,则可以使用array.reduce进行排序,并在线性时间内将它们连接到有序字符串: 设字符串=[ {值:ab,位置:3}, {值:cd,位置:2}, {值:ef,位置:1} ]; 让string=strings.reducesorted,next=>{ 排序后的[next.position-1]=next.value; 返回排序; },[]加入;
console.logstring;//efcdab根据您描述对象结构的方式,看起来您将有一个这样的数组选择一个可能的随机顺序:
var arr = [ { value: "ab", position: 2 }, { value: "cd", position: 1 }, { value: "ef", position: 3 } ];
然后可以根据位置对数组排序,然后连接字符串
var arr=[{value:ab,位置:2},{value:cd,位置:1},{value:ef,位置:3}];
arr.sorta,b=>a.position-b.position;
var ans=;
forvar i=0;我不确定你是如何让他们选择订单的,但是有了这个,你所要做的就是填写选项供他们选择,剩下的工作就完成了。这可以通过很多方式变得更漂亮,但这取决于您以及您如何对待用户交互
var selections = ["ab", "cd", "ef"];
var str = "";
while(selections.length){
var choice = prompt("Type part of the string from below that you want to add first:\n " + " " + selections);
var index = selections.indexOf(choice);
if(index !== -1){
str += choice;
selections.splice(index, 1);
}
}
alert("You typed: " + str);
你试过一种方法吗?只需保留两个数组,一个包含字符串,另一个包含每个位置的字符串。在您的示例中:[s1、s2、s3]和[3、2、1]。然后,您可以迭代位置数组,并将相应的字符串元素连接到字符串。用户如何决定位置?请澄清!假设我接收到一个具有以下结构的对象:{value:ab,position:1};可以使用2个输入来添加值和位置,我只是创建了它们objects@five请检查我的答案是否有用?您是否随机选择了位置?对于此组合:让字符串=[{value:ab,位置:1},{value:cd,位置:3},{value:ef,位置:0},{value:gh,位置:2}];结果应该是//efabghcd,但您的解决方案将提供不同的解决方案。还是我漏掉了什么?@PankajShukla不,你没有漏掉任何东西,我假设位置指示源索引,而不是目标索引。修复了它,谢谢你指出它。聪明的排序方法,尽管如此排序,但OP无法逃脱。他必须分类@PankajShukla他必须排序,是的,但不一定通过Array.sort:
var selections = ["ab", "cd", "ef"];
var str = "";
while(selections.length){
var choice = prompt("Type part of the string from below that you want to add first:\n " + " " + selections);
var index = selections.indexOf(choice);
if(index !== -1){
str += choice;
selections.splice(index, 1);
}
}
alert("You typed: " + str);