返回自定义数组值

时间:2019-05-11 20:15:43

标签: javascript jquery

我有一个代码示例,该代码按顺序返回数组中的每个值。我使用了forEach()。有什么方法可以返回自定义数组中的值。

我做了一些函数,用于将text-area的值拆分为所有文本区域并使用文本字符串进行查询。我能够成功。但是有些问题。下面的示例。

  1. 键入Filed1字符串,例如:   
    GFSD
    65897542

  2. 然后单击“拆分”按钮。输出:将所有值分配到扩孔文本区域。

  3. GF 值放入输入字符字段。输出: 6589

  4. 我的问题是,当我输入 GF 之类的值然后输出 6589 时。而当放置 FG 时,也会输出相同的输出 6589 ,而不是 8965 。如果有解决方案,请帮助我。我希望角色严格遵守数字。

代码示例:

$('#output1').focus(()=>{
    var a=document.querySelectorAll('textarea');
    var str = $('#ccMain').val();
    var first = str[0];
    var second = str[1];
    console.log(first," ", second)
    var str='';
    a.forEach(e=>e.value.includes(first)||e.value.includes(second)?str+=e.value.substr(1,e.value.length):false)
        $('#output1').val(str);
    })

 function splitText() {
      var textAreas = [];
      //Put all of the textareas into an array for easy access
      for(let i = 1; i <= 4; i++) {
      textAreas.push(document.getElementById(`value${i}`));
      }
      //Read the text from text1 and split it at a new line
      var text = textAreas[0].value;
      var [line1, line2] = text.split(/\r?\n/)
      for(let i = 0; i < 4; i++) {
      var combinedText = line1.substring(i, i+1) + line2.substring(i*2, (i+1)*2)
      textAreas[i].value = combinedText;
      }
      }
      $('#output').focus(()=>{
      var a=document.querySelectorAll('textarea');
      var str = $('#ccMain').val();
      var first = str[0];
      var second = str[1];
      console.log(first," ", second)
      var str='';
      a.forEach(e=>e.value.includes(first)||e.value.includes(second)?str+=e.value.substr(1,e.value.length):false)
      $('#output').val(str);
      })
<html>
   <head>
      <title>Test Demo</title>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
   </head>
   <body>
      <label>Filed1 </label>
      <textarea id="value1"></textarea>
     
      <label>Filed2:</label>
      <textarea id="value2"></textarea>
      
      <label>Filed3:</label>
      <textarea id="value3"></textarea>
      
      <label>Filed4:</label>
      <textarea id="value4"></textarea>
      
      <button onclick="splitText()">Split!</button>
      <br>
      <label>Input Character:</label>
      <br>
     
      <input type="text" id="ccMain"  >
     
      <textarea id="output"></textarea>
      
   </body>
   </html>

2 个答案:

答案 0 :(得分:1)

我会使用map在字母和数字之间添加对应关系

$('#output').focus(()=>{
    var textareas = document.querySelectorAll('textarea');
    var map = new Map(Array.from(textareas, area => [area.value[0], area.value.slice(1)]));
    var str = Array.from($('#ccMain').val(), c => map.get(c)).join``;
    $('#output').val(str);
});

function splitText() {
    //Put all of the textareas into an array for easy access
    var textAreas = [];
    for(let i = 1; i <= 4; i++) {
        textAreas.push(document.getElementById(`value${i}`));
    }
    //Read the text from text1 and split it at a new line
    var text = textAreas[0].value;
    var [line1, line2] = text.split(/\r?\n/);
    for (let i = 0; i < 4; i++) {
        var combinedText = line1.substring(i, i+1) + line2.substring(i*2, (i+1)*2)
        textAreas[i].value = combinedText;
    }
}

$('#output').focus(()=>{
    var textareas = document.querySelectorAll('textarea');
    var map = new Map(Array.from(textareas, area => [area.value[0], area.value.slice(1)]));
    var str = Array.from($('#ccMain').val(), c => map.get(c)).join``;
    $('#output').val(str);
});
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <label>Filed1 </label>
  <textarea id="value1"></textarea>
 
  <label>Filed2:</label>
  <textarea id="value2"></textarea>
  
  <label>Filed3:</label>
  <textarea id="value3"></textarea>
  
  <label>Filed4:</label>
  <textarea id="value4"></textarea>
  
  <button onclick="splitText()">Split!</button>
  <br>
  <label>Input Character:</label>
  <br>
 
  <input type="text" id="ccMain"  >
 
  <textarea id="output"></textarea>
 

答案 1 :(得分:0)

好吧,您在这里的代码必须更加小心,否则您在代码块中两次定义了str

就您想要实现的目标而言,我想您想要的是类似的东西

str = Array.from( a )
  .filter( e => e.value.includes( first ) || e.value.includes( second ) )
  .map( e => e.value.substring( 1 ) )
  .join('')

这将首先使用Array.from从您的节点创建一个数组,然后您可以filter真正感兴趣的值,之后可以取substring的值(您不需要e.value.length,因为这与您仅在startIndex方法中定义substring的情况相同