Обратный массив с крючками React - PullRequest
0 голосов
/ 04 февраля 2019

Используя javascript, есть ли какой-нибудь быстрый способ поменять 2 элемента в массиве?

Так что, если бы он был логическим, вы могли бы сделать

const [isTrue, setIsTrue] = useState(false);

setIsTrue(!isTrue);

, но сказать, что у меня есть массив

// I want to swap the items in the array on a click 
const [trueOrFalse, setTrueOrFalse] = useState([true, false]);

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

setTrueOrFalse(!trueOrFalse); // would equal [false, true]

<div onClick={() => setTrueOrFalse()} />Swap items in array</div>

Я пытаюсь взять элемент с индексом 0и переместите его в индекс 1, и наоборот.

Ответы [ 5 ]

0 голосов
/ 04 февраля 2019

Вы можете попробовать это

Array.prototype.swap = function(index1,index2){
	[this[index1], this[index2]] = [this[index2],this[index1]]
}
let arr = [1,2,3,4];
arr.swap(1,2);
console.log(arr);
0 голосов
/ 04 февраля 2019

Вы можете использовать обратный метод массива

function reverse(a){
  return a.reverse()
}

console.log(reverse([true, false]))
0 голосов
/ 04 февраля 2019

Вы можете использовать ES6 назначение деструктурирования , чтобы легко поменять местами переменные в одном выражении:

//Get inital array from useState and store in 2 variables
var [val1, val2] = useState();

//Check out the values
console.log(`Before swap values: val1 = ${val1}, val2 = ${val2}`);

//Do the swap using array desctructuring:
[val1, val2] = [val2, val1];

//Now see that the values have swapped
console.log(`After swap values: val1 = ${val1}, val2 = ${val2}`);

function useState() {
  return [true, false];
}
0 голосов
/ 04 февраля 2019

Вы можете просто использовать деструктуризацию с помощью метода обратного вызова setState setter

// I want to swap the items in the array on a click 
const [trueOrFalse, setTrueOrFalse] = useState([true, false]);

const swapState = () => {
    setTrueOrFalse(prevState => {
        const [val1, val2] = prevState;
        return [val2, val1];
    })
}

<div onClick={() => swapState()} />Swap items in array</div>

Рабочая демонстрация

0 голосов
/ 04 февраля 2019

Попробуйте

let a=[true, false];

// inverse values
let b= a.map(x=>!x)

// swap sequence (inplace)
a.reverse();

console.log('inverse values', b);
console.log('swap sequence', a);
...