Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-通过在不同位置组合其他字符串来创建字符串_Javascript_String - Fatal编程技术网

JavaScript-通过在不同位置组合其他字符串来创建字符串

JavaScript-通过在不同位置组合其他字符串来创建字符串,javascript,string,Javascript,String,假设我有3个字符串:s1=ab,s2=cd,s3=ef 目标是通过组合s1、s2和s3来创建另一个字符串。关键在于用户可以决定这3个字符串的位置。例如: s1-位置3 s2-位置2 s3-位置1 结果: efcdab 我的问题是,解决这个问题的最好方法是什么?我的解决方案是创建3个对象,每个对象都将字符串位置和值作为属性,将对象添加到和数组中,然后使用每个对象的位置属性对数组进行排序,但我感觉有更好的解决方案。 提前谢谢 您可以使用两个对象。一个有字符串和值的,比如 我们可以说,像这样定位物体

假设我有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);