我有一个数组MyArray,我想删除位置i的一个元素。
我试过了:
MyArray = MyArray.splice(i, 1);
但是它返回了我要删除的元素,而不是没有我要删除的元素的数组。
我确定这是一个简单的修复,无论如何,谢谢。
答案 0 :(得分:19)
更改
MyArray = MyArray.splice(i, 1);
到
MyArray.splice(i, 1);
答案 1 :(得分:11)
摘要
更改数组的内容,在删除旧元素时添加新元素。
原始数组被更改,而不是返回删除了指定元素的新数组。 MyArray.splice(i, 1);
就足够了。
答案 2 :(得分:3)
splice()是一种破坏性的方法,除了返回值之外还有副作用。当它返回已删除的元素时,它会修改您传入的实际数组。
alert("Before: " + MyArray);
MyArray.splice(i, 1);
alert("After: " + MyArray);
答案 3 :(得分: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].
答案 4 :(得分:1)
你已经得到了它!但是不要将它分配给新值..只需使用现有的数组。
MyArray.splice(i, 1);
Something = MyArray;
希望这有帮助!
答案 5 :(得分: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>
答案 6 :(得分:0)
array.splice(index , howMany[, element1[, ...[, elementN]]])
更改数组的内容,在删除旧元素时添加新元素。
包含已删除元素的数组。如果仅删除一个元素,则返回一个元素的数组。如果没有删除任何元素,则返回一个空数组。
答案 7 :(得分: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);
取决于数组的结构,有时更容易查询/操作字符串而不是数组(有时反之亦然)