11

我有一个数组 MyArray,我想删除位置 i 的一个元素。

我试过了:

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

您应该阅读关于 splice 的文档

概括

更改数组的内容,在删除旧元素的同时添加新元素。

原始数组被更改,而不是返回删除了指定元素的新数组。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

句法

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

描述

更改数组的内容,在删除旧元素的同时添加新元素。

返回

包含已移除元素的数组。如果仅删除一个元素,则返回一个包含一个元素的数组。如果没有元素被删除,则返回一个空数组。

来自数组拼接方法 - JavaScript | MDN

于 2013-09-13T10:02:19.847 回答
0

我遇到了类似的问题,特别是因为我只想删除数组中的特定项目,而不是与该项目匹配的所有项目。

我为 KO 可观察数组创建了这个扩展,这似乎有效。我还没有尝试过使用对象数组,但我不明白为什么这不起作用。

当我第一次学习 KO 时,我在处理 Arrays 时非常困难,所以我希望这对其他人有用:

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

这是另一种方式(如果您仍想将其设置为变量并保持原始数组相同):

// 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 回答