Ich versuche, 2 Spalten aus einem abgegrenzten Text auszutauschen, aber am weitesten entfernt habe ich die erste Spalte. Das versuche ich zu erreichen.
// Input
A1—B1—C1
A2—B2—C2
A3—B3—C3
Tauschen Sie Spalte 1 gegen Spalte 3 aus. Trennzeichen ist "-".
// Result
C1—B1—A1
C2—B2—A2
C3—B3—A3
var text = $('#input').val().split("\n");
var delimiter = "—";
var col_1 = $('#col_1').val() - 1;
var col_2 = $('#col_2').val() - 1;
var out = [];
var col_arr = [];
var col = '';
// Get first column
for (var i = 0; i < text.length; i++) {
col_arr = text[i].split(delimiter);
col = col_arr[col_1];
if (col != undefined) col = col;
else col = '';
out[i] = col;
}
text = out.join('\n');
3 Antworten
Es ist ein einfacher Swap mit einer temp
Variablen. Ich habe Array.map()
text
zu iterieren, aber Sie können es durch eine `for ... -Schleife ersetzen.
$("button").click(function() {
var delimiter = "—";
var rowDelimiter = "\n";
var text = $('#input').val()
.trim() // remove white space before and after the text
.split(rowDelimiter);
var col_1 = $('#col_1').val() - 1;
var col_2 = $('#col_2').val() - 1;
// check the cols to be a number between 0 and the amount of columns
// and notify user if their not
var result = text.map(function(row) {
var arr = row.split(delimiter);
var temp = arr[col_1]; // cache the value of col_1
arr[col_1] = arr[col_2]; // set the value of col_2 1 to be that of column 2
arr[col_2] = temp; // set the value of col_2 to be the value of temp
return arr.join(delimiter);
}).join(rowDelimiter);
$('#output').val(result);
});
textarea {
width: 100%;
height: 120px
}
button {
margin: 10px 0
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Swap col #<input id="col_1" value="2"> with col #<input id="col_2" value="3">
<br>
<textarea id="input">
A1—B1—C1—D1
A2—B2—C2—D2
A3—B3—C3—D3
</textarea>
<button>Swap</button>
<textarea id="output">
</textarea>
Sie haben den Text mit split
erfolgreich in ein Array seiner Bestandteile aufgeteilt. Sie können jetzt die Array-Funktion reverse
verwenden, um die Reihenfolge umzukehren, und dann alle Teile mit {{X2 zusammenfügen }} Array-Funktion und Ihr Trennzeichen.
Dies vereinfacht Ihren Code in Ihrer for
- Schleife wie folgt:
for (var i = 0; i < text.length; i++) {
out[i] = text[i].split(delimiter).reverse().join(delimiter);
}
Split () gibt ein Array zurück. Sie können also zuerst Ihre Textdaten zu einem tatsächlichen Array verarbeiten, damit Sie leichter daran arbeiten können:
function getArrayFromInput(){
var arr = [];
var lines = $('#input').val().split("\n");
for (let line of lines){
let column = line.split('—');
arr.push(column);
}
return arr;
}
//returns [['A1','B1','C1'],['A2','B2','C2'],['A3','B3','C3']]
Dann ist es einfacher zu tun, was Sie versuchen :)
function swapColumns(inputArr, col1, col2){
var arr = JSON.parse(JSON.stringify(inputArr)); //get inputArr structure
for(let i = 0; i<arr.length; i++){
//swap the values
arr[i][col1] = inputArr[i][col2];
arr[i][col2] = inputArr[i][col1];
}
return arr;
}
//return your array with swaped columns
Ich überlasse es Ihnen dann, das Array in Text umzuwandeln!
Fühlen Sie sich frei, Fragen zu stellen