我有3个输入,每个输入3位数。然后我的代码将所有数字组合成1个数组。在这种情况下[1,2,3,4,5,6,7,8,9]
。我只想输出从第一个数字开始的每一对,不包括双位数,重复对或反转对。所以我希望它看起来像:
12
13
14 etc 。
但如果12已经是数组中的一对,则不会添加21。 (反对)。不会添加像55这样的双位数字以及重复对(任何一对都不会输入两次)。
关于我应该采取的方向的任何想法?
var button = document.querySelector( 'button' );
button.addEventListener( 'click', clicked );
function clicked() {
var output = document.getElementById( 'output' );
var first = document.getElementById( 'first' );
var second = document.getElementById( 'second' );
var third = document.getElementById( 'third' );
var first = first.value.split( '' );
var second = second.value.split( '' );
var third = third.value.split( '' );
var numGroup = first.concat( second );
numGroup = numGroup.concat( third );
//alert( numGroup );
output.innerHTML = '';
var i = 0;
var j = 0;
for( i; i < numGroup.length; i++ ){
for( j; j < numGroup.length; j++ ){
output.innerHTML += numGroup[ i ] + numGroup[ j ] + '<br>';
}
}
}
&#13;
* {
box-sizing: border-box;
}
html {
font-family: Arial;
letter-spacing: 0.1rem;
}
.controls {
display: flex;
}
input {
font-size: 2rem;
letter-spacing: 0.125rem;
padding: 0.5rem;
width: 4.75rem;
margin-right: 1rem;
}
button {
height: 4.5rem;
width: 4.75rem;
text-transform: uppercase;
padding: 8px;
background: black;
border: none;
color: white;
cursor: pointer;
}
button:hover {
outline-color: aqua;
outline-width: 2px;
outline-style: solid;
outline-offset: 1px;
}
.output {
background-color: #eee;
padding: 1rem;
margin-top: 1rem;
width: 22rem;
}
&#13;
<div class="controls">
<input type="text" maxlength="3" id="first" value="123">
<input type="text" maxlength="3" id="second" value="456">
<input type="text" maxlength="3" id="third" value="789">
<button>submit</button>
</div>
<div class="output" id="output">
output
</div>
&#13;
编辑:据我所知,这是关于可能的组合而非排列的问题。
答案 0 :(得分:0)
如果我理解了这个问题,那么对于数组中的每个项目,您都希望将其与后面的所有项目配对。这避免了重复对(包括反向对)以及双重对象。
为此,您可以使用.reduce()
将结果数组放在一起。在每次迭代中,您将获得当前数字,然后您只需要将当前索引前的一个原始数组切片,以获得应该与之配对的所有数组。
所以你在当前索引之后获取子切片,你.map()
,返回外部数字与.map()
回调中当前索引的配对,并将映射的数组连接到.reduce
结果。
所有这些只需要几行代码。
const arr = [1,2,3,4,5,6,7,8,9];
const res = arr.reduce((res, n, i, arr) =>
res.concat(arr.slice(i+1).map(nn => "" + n + nn))
, [])
console.log(res);
&#13;
对于明确的要求,请尽早消除原始数据集中的任何重复项。您可以在评论中使用 trincot 提供的示例。
const arr = [...new Set([1,2,3,4,5,5,6,3,7,8,9])];
const res = arr.reduce((res, n, i, arr) =>
res.concat(arr.slice(i+1).map(nn => "" + n + nn))
, []);
String.prototype.reverse = function() { this.split("").reverse().join("")
}
console.log("No doubles, dupes or reverse dupes?",
res.every(s =>
res.indexOf(s) === res.lastIndexOf(s) &&
res.indexOf(s.reverse()) === -1 &&
s !== s.reverse()
)
);
console.log(res);
&#13;