11

配列MyArrayがあり、位置iの1つの要素を削除したいと思います。

私は試した:

MyArray = MyArray.splice(i, 1); 

しかし、削除したい要素のない配列ではなく、削除したい要素を返します。

とにかく、それは簡単な修正だと確信しています。

4

8 に答える 8

21

変化する

MyArray = MyArray.splice(i, 1); 

の中へ

MyArray.splice(i, 1); 
于 2012-05-01T20:06:28.530 に答える
11

スプライスに関するドキュメントを読む必要があります

概要

配列の内容を変更し、古い要素を削除しながら新しい要素を追加します。

指定された要素が削除された新しい配列を返すのではなく、元の配列が変更されます。MyArray.splice(i, 1);十分なはずです。

于 2012-05-01T20:06:27.360 に答える
3

splice()は、戻り値以外に副作用があるという点で破壊的なメソッドです。削除された要素を返しますが、渡した実際の配列を変更します。

alert("Before: " + MyArray);
MyArray.splice(i, 1);
alert("After: " + MyArray);
于 2012-05-01T20:06:42.313 に答える
2

spliceアレイを所定の位置で編集します。

var arr = [1, 2, 3, 4];
// arr is [1, 2, 3, 4];
var el = arr.splice(0, 1);
// el is [1], arr is now [2, 3, 4].
于 2012-05-01T20:06:52.190 に答える
1

あなたはほとんどそれを持っています!ただし、新しい値に割り当てないでください。既存の配列を使用するだけです。

MyArray.splice(i, 1);
Something = MyArray;

お役に立てれば!

于 2012-05-01T20:04:45.250 に答える
0

同様の問題が発生しました。特に、配列内の特定のアイテムのみを削除したかったので、そのアイテムに一致するすべてのアイテムが削除されたわけではありませんでした。

KOの監視可能な配列用にこの拡張機能を作成しましたが、これは機能しているようです。オブジェクトの配列でまだ試していませんが、なぜそれが機能しないのかわかりません。

私が最初にKOを学んだとき、配列を扱うのに非常に苦労したので、これが他の人に役立つことを願っています。

JavaScript:

ko.observableArray.fn.removeAt = function (index) {
  this.valueWillMutate();
  this.splice(index, 1);
  this.valueHasMutated();
}

HTML:

<div data-bind="foreach: Answers">
    <input type="text" data-bind="value: $data"/>
    <button 
        data-bind="click: function(){ $parent.Answers.removeAt($index()) }"                          
        title="Remove"
    >X</button>
</div>
于 2013-04-26T16:17:43.057 に答える
0

構文

array.splice(index , howMany[, element1[, ...[, elementN]]])

説明

配列の内容を変更し、古い要素を削除しながら新しい要素を追加します。

戻る

削除された要素を含む配列。1つの要素のみが削除された場合、1つの要素の配列が返されます。要素が削除されていない場合は、空の配列が返されます。

配列スプライスメソッドから-JavaScript| MDN

于 2013-09-13T10:02:19.847 に答える
0

別の方法があります(それでも変数として設定し、元の配列を同じに保ちたい場合):

// example array
var foo = ['1', '13', '44', '17', '17', '19', '1', '7', '17'];

// lets say we want to remove one of the 17s from the array
// convert array to string, do replacements, then convert back
var bar = foo.join().replace('17', '').replace(/\,\,/gi, ',').split(',');

// should log ['1', '13', '44', '17', '19', '1', '7', '17']
console.log(bar);

配列の構造によっては、配列の代わりに文字列をクエリ/操作する方が簡単な場合もあります(逆の場合もあります)。

于 2017-02-26T19:58:11.867 に答える