我试图从分隔文本中交换2列,但是我得到的最远的是抓住第一列。这就是我想要实现的目标。
// Input
A1—B1—C1
A2—B2—C2
A3—B3—C3
使用#3列交换#1列。分隔符是" - "。
// 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');
答案 0 :(得分:3)
您已使用split
成功将文本拆分为其组成部分的数组,您现在可以使用reverse
数组函数来反转顺序,然后使用以下内容将所有部分重新加入join
数组函数和分隔符。
这会将for
循环中的代码简化为:
for (var i = 0; i < text.length; i++) {
out[i] = text[i].split(delimiter).reverse().join(delimiter);
}
答案 1 :(得分:1)
split()返回一个数组,所以你可以做的是先将文本数据处理成一个实际的数组,这样就更容易处理它:
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']]
当你想要做的事情会更容易:)
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
然后我会让你处理数组到文本的转换!
随意提出任何问题
答案 2 :(得分:1)
它是一个简单的swap,带有temp
变量。我已经使用Array.map()
来迭代text
数组,但您可以用`for ...循环替换它。
$("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);
});
&#13;
textarea {
width: 100%;
height: 120px
}
button {
margin: 10px 0
}
&#13;
<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>
&#13;