React 组件中的 ES2015 非变异数组交换(或通量操作)
ES2015 non-mutating array swap in React component (or flux action)
也许我只是在搜索错误的关键字,但我一直在尝试找到一个 JavaScript(最好是 ES2015+)函数的示例,以在非可变(不可变)中交换两个数组值方法。我也想使用纯 JS 来做到这一点,而不必添加不变性库。
例如,如果我有 [1, 2, 3, 4, 5, 6]
,我想将 3 和 4(或者可能是它们的索引)传递到 returns 新数组 [1, 2, 4, 3, 5, 6]
的函数中。我找到了几种方法来做到这一点,但它们通过直接替换值来改变数组。我需要一个不变的方式。我猜也许使用 slice?我正在做的是一个 React 组件,如果这很重要并且数组是一个状态值。
TIA!
function swap(arr, i1, i2) {
// i1 must be lower
if (i1 > i2) i1 = [i2, i2 = i1][0];
return arr
.slice(0,i1)
.concat(arr[i2])
.concat(arr.slice(i1+1,i2))
.concat(arr[i1])
.concat(arr.slice(i2+1))
}
也许不完美,但垫脚石:)
不是 ES6(还在学习中)
function swap(array, first, second){
var final = array.slice();
temp = final[first];
final[first] = final[second];
final[second] = temp;
return final
}
ES6 感谢@Benjamin
const swapIndices = (array,index1,index2) => {
const newArray = array.slice();
newArray[index1] = array[index2];
newArray[index2] = array[index1];
return newArray;
}
也许我只是在搜索错误的关键字,但我一直在尝试找到一个 JavaScript(最好是 ES2015+)函数的示例,以在非可变(不可变)中交换两个数组值方法。我也想使用纯 JS 来做到这一点,而不必添加不变性库。
例如,如果我有 [1, 2, 3, 4, 5, 6]
,我想将 3 和 4(或者可能是它们的索引)传递到 returns 新数组 [1, 2, 4, 3, 5, 6]
的函数中。我找到了几种方法来做到这一点,但它们通过直接替换值来改变数组。我需要一个不变的方式。我猜也许使用 slice?我正在做的是一个 React 组件,如果这很重要并且数组是一个状态值。
TIA!
function swap(arr, i1, i2) {
// i1 must be lower
if (i1 > i2) i1 = [i2, i2 = i1][0];
return arr
.slice(0,i1)
.concat(arr[i2])
.concat(arr.slice(i1+1,i2))
.concat(arr[i1])
.concat(arr.slice(i2+1))
}
也许不完美,但垫脚石:)
不是 ES6(还在学习中)
function swap(array, first, second){
var final = array.slice();
temp = final[first];
final[first] = final[second];
final[second] = temp;
return final
}
ES6 感谢@Benjamin
const swapIndices = (array,index1,index2) => {
const newArray = array.slice();
newArray[index1] = array[index2];
newArray[index2] = array[index1];
return newArray;
}