web-dev-qa-db-ja.com

不変-スライス(スプライスなし)で配列の要素を変更

3/4要素を変更するにはどうすればよいですか?予想される出力は[1,2,4,3,5]です

let list = [1,2,3,4,5];
const removeElement = list.indexOf(3); // remove number 3
list.slice(0, removeElement).concat(list.slice(removeElement+1)) // [1,2,4,5]

...次は、スプライスなしで番号4の後に番号3をプッシュします

9

sliceは、操作対象の配列を変更しないため、返されるものに値を割り当てる必要があります

let list = [1,2,3,4,5];
const removeElement = list.indexOf(3); // remove number 3
var newList = list.slice(0, removeElement).concat(list.slice(removeElement+1)) // [1,2,4,5]

ES2015構文を使用する準備ができている場合は、次のようにspread演算子を使用できます。

const removeElement = list.indexOf(3); // remove number 3
var es6List = [
  ...list.slice(0, removeElement),
  ...list.slice(removeElement+1)
];
console.log(es6List);

フィドル

16
Mark Williams

これを記述する最も簡単な方法は、spread演算子を使用することです。

let newList = [...list.slice(0, 2), list[4], list[3], ...list.slice(4)];
7
ide
var list = [1,2,3,4,5];
var numToRemove = 3;

var removeElementIndex = list.indexOf(numToRemove);
var afterRemoveElement = list[removeElementIndex+1];

list.slice(0, removeElementIndex).concat(afterRemoveElement).concat(numToRemove).concat(list.slice(removeElementIndex+2)) // [1,2,4,3,5]
3
Joe

Object.assignは実際にここで機能します

const newList = Object.assign([], list, {
  2: list[3],
  3: list[2],
});

list // [1,2,3,4,5]
newList // [1,2,4,3,5]
newList === list // false
1
pierrejacques