JavaScript - 如何确保数组操作在函数内持久存在?

JavaScript - How to make sure array manipulations are persistent inside a function?

我正在尝试编写一个 JavaScript 函数 (ES5),它将接收一个数组,对其进行过滤,然后将原始数组设置为新数组。

这是我的观点:https://plnkr.co/edit/OWeOjJ3SLVGYRaweyy3Z

这是我正在尝试做的事情的基本伪代码:

var result = [{ 'date': '20171116' }, { 'date': '20171115' }];
var data = { 'date': '2017116' };
deleteEntry(data, result);
console.log(result); //should  have one entry

function deleteEntry(data, result) {
  result = result.filter(function(item) {
    return item.date !== data.date;
  });
}

我认为问题与数组引用有关。我不知道如何完成任务。

您应该 return 修改后的数组并将其响应分配给 result 变量:

function deleteEntry(data, result) {
  return result.filter(function(item) {
    return item.date !== data.date;
  });
}

result = deleteEntry(data, result);

Array.filter returns 一个新的数组实例,这样当你做 result = result.filter(...)。您可以使用 array.splice 代替:

var result = [{ 'date': '20171116' }, { 'date': '20171115' }];
var data = { 'date': '20171116' };
deleteEntry(data, result);
function deleteEntry(data, result) {
    var index = result.findIndex(item => item.date === data.date);
    result.splice(index, 1);
}
console.log(result);

您可以使用 Array#splice 删除所有元素并添加新的过滤元素。

function deleteEntry(data, result) {
    Array.prototype.splice.apply(result, [0, result.length].concat(result.filter(function(item) {
        return item.date !== data.date;
    })));
}

var result = [{ date: '20171116' }, { date: '20171115' }],
    data = { date: '20171116' };
    
deleteEntry(data, result);
console.log(result);

ES6

function deleteEntry(data, result) {
    var temp = result.filter(item => item.date !== data.date);
    result.length = 0;
    result.push(...temp);
}

var result = [{ date: '20171116' }, { date: '20171115' }],
    data = { date: '20171116' };
    
deleteEntry(data, result);
console.log(result);