与标题一样,我可以修改作为参数传递的数组吗? (不使用return
)
function arrayElementsRemove(array, element) {
array.filter(item => item != element);
}
然后
it('should remove items from array', () => {
var array = [1,2,2,3];
arrayElementsRemove(array, 3);
expect(array).to.equal([1,2,2]); // fails, array still equals [1,2,2,3]
});
答案 0 :(得分:3)
数组作为参考传递。您的问题是Array.filter
不会更改原始数组,而是返回一个新数组。
而不是Array.filter,您应该从length-1
到0
进行循环,并在element === array[i]
使用Array.splice
删除该项时。
您的arrayElementsRemove
功能应如下所示:
var arr = [1, 2, 3, 2, 3];
function arrayElementsRemove(array, element) {
for (var i = array.length-1; i >= 0; i--) {
if (array[i] === element) {
array.splice(i, 1);
}
}
}
arrayElementsRemove(arr, 3);
console.log(arr);