假设我有3个字符串:s1 =“ab”,s2 =“cd”,s3 =“ef”。
目标是通过组合s1,s2和s3来创建另一个字符串。问题在于用户可以决定这3个字符串的位置。所以,例如:
s1 - 位置3;
s2 - 位置2;
s3 - 位置1
结果: efcdab。
我的问题是,解决这个问题的最佳方法是什么?我的解决方案是创建3个对象,每个对象将字符串位置和值保存为属性,将对象添加到数组中,然后使用每个对象的position属性对数组进行排序,但我只是觉得有更好的解决方案。 提前谢谢!
答案 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}
命令并在线性时间内将它们连接到有序字符串:
Array.reduce
&#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);