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

时间:2017-05-22 18:47:47

标签: javascript string

假设我有3个字符串:s1 =“ab”,s2 =“cd”,s3 =“ef”。

目标是通过组合s1,s2和s3来创建另一个字符串。问题在于用户可以决定这3个字符串的位置。所以,例如:

s1 - 位置3;

s2 - 位置2;

s3 - 位置1

结果: efcdab。

我的问题是,解决这个问题的最佳方法是什么?我的解决方案是创建3个对象,每个对象将字符串位置和值保存为属性,将对象添加到数组中,然后使用每个对象的position属性对数组进行排序,但我只是觉得有更好的解决方案。 提前谢谢!

5 个答案:

答案 0 :(得分:1)

试一下,strPos是用户定义的对象,用于排序字符串

var 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 = '';
for(var i=1;i<=3;i++){
  fin += strs[strPos[i]];
}
console.log(fin);

@Five从您的评论中可以更改答案以遵循您的对象结构,如下所示

var definedOrderedList = [{
  value: 'ab',
  position: 2
}, {
  value: 'cd',
  position: 1
}, {
  value: 'ef',
  position: 3
}];
var strArr = [];
for (var o in definedOrderedList) {
  strArr[definedOrderedList[o].position] = definedOrderedList[o].value;
}
var finalString = strArr.join('');
console.log(finalString);

答案 1 :(得分:0)

您可以使用两个对象。一个有字符串和值的,让我们说就像

一样
{
  s1: 'String1',
  s2: 'String2',
  s3: 'String3'
}

可以说位置对象

{
  p1: 'store user entry for position1',
  p2: 'store user entry for position2',
  p3: 'store user entry for position3'
}

并访问第一个对象,如此值[position ['p1']]添加到值[position ['p2']]等等

答案 2 :(得分:0)

如果你的字符串和位置是question_id个对象的数组,你可以使用{value, position}命令并在线性时间内将它们连接到有序字符串:

&#13;
&#13;
Array.reduce
&#13;
&#13;
&#13;

答案 3 :(得分:0)

根据您描述对象结构的方式,看起来您将拥有这样的数组(选择一种可能的随机顺序):

var arr = [ { value: "ab", position: 2 },  { value: "cd", position: 1 },  { value: "ef", position: 3 } ];

然后你可以根据位置对数组进行排序,然后连接字符串。

var arr = [ { value: "ab", position: 2 },  { value: "cd", position: 1 },  { value: "ef", position: 3 } ];
arr.sort((a,b) => a.position - b.position);

var ans="";
for(var i=0;i<arr.length;i++) {
  ans += arr[i].value;
}
console.log(ans);

答案 4 :(得分: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);