Нарезка узлов в массиве - PullRequest
0 голосов
/ 08 марта 2019

Когда я впервые выбираю два параметра во втором меню выбора, массив становится заполненным этими двумя вариантами выбора. Я хочу, чтобы второй выбранный параметр заменил первый, поэтому даже если я начну с выбора двух параметров из второго меню выбора, длина массива останется равной единице, динамически изменяясь между этими выборами. Я надеюсь, вы понимаете. Спасибо за любую помощь. Я знаю, что мог бы просто сделать это одной функцией, и эта проблема не существовала бы, но для моего использования я не могу этого сделать.

var select1 = document.getElementById('select1');
var select2 = document.getElementById('select2');
var array = []
        
function myFunct1() { 
  var one = select1.options[select1.selectedIndex].value;
  array.splice(0, 1, one);
  console.log(array);
        }
        
function myFunct2() {
  var two = select2.options[select2.selectedIndex].value;
  array.splice(1, 1, two);
  console.log(array);
        }
<select id = 'select1' onchange = 'myFunct1()'>
        <option disabled selected value> -- select an option -- </option>
        <option value = 'Dog'>ONE</option>
        <option value = 'Cat'>TWO</option>
        <option value = 'Bear'>THREE</option>
        </select>
    
        
    <select id = 'select2' onchange = 'myFunct2()'>
        <option disabled selected value> -- select an option -- </option>
        <option value = 'Dog'>ONE</option>
        <option value = 'Cat'>TWO</option>
        <option value = 'Bear'>THREE</option>
        </select>

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Попробуйте:

var array = [];
        
function myFunct() {
  if(array.indexOf('One') === -1 ) { array.unshift('One') ; }    
  console.log(array);
}
        
function myFunct2() {
  if(array.indexOf('Two') === -1 ) { array.push('Two') ; }
  console.log(array);
}
<button onclick = 'myFunct()'>ONE</button>
<button onclick = 'myFunct2()'>TWO</button>
1 голос
/ 08 марта 2019

используйте Array.prototype.unshift(), чтобы повысить ценность на первом месте. Вы можете проверить, существует ли элемент в массиве используя includes().
И вместо создания двух функций вы можете создать одну и ту же функцию и передать ей различные параметры.

var array = [];
        
        function myFunct(val){ 
            if(!array.includes(val)) array.unshift(val);
            console.log(array);
        }
<button onclick = 'myFunct("One")'>ONE</button>
        <button onclick = 'myFunct("Two")'>TWO</button>

Если вы хотите заменить новое значение первым, используйте этот код

function myFunct(val) {
     array.unshift(val);
     array = [... new Set(array)];
     console.log(array); 
}

Обновление:

var select1 = document.getElementById('select1');
var select2 = document.getElementById('select2');
var array = [];
let sel1 = false;

function myFunct1() { 
  var one = select1.options[select1.selectedIndex].value;
  if(array.length === 1 && !sel1) array.unshift(one);
  else array.splice(0,1,one);
  console.log(array);
  sel1 = true;
}

function myFunct2() {
  var two = select2.options[select2.selectedIndex].value;
  array.splice(sel1, 1, two);
  console.log(array);
}
...