在Javascript中交换一维数组中的列

时间:2018-04-18 10:37:03

标签: javascript jquery arrays

我试图从分隔文本中交换2列,但是我得到的最远的是抓住第一列。这就是我想要实现的目标。

// Input
A1—B1—C1
A2—B2—C2
A3—B3—C3

使用#3列交换#1列。分隔符是" - "。

// Result
C1—B1—A1
C2—B2—A2
C3—B3—A3

JSFiddle

  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 个答案:

答案 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 ...循环替换它。

&#13;
&#13;
$("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;
&#13;
&#13;