我正在尝试编写一个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;
});
}
我认为这个问题与数组引用有关。我不知道如何完成任务。
答案 0 :(得分:2)
您应该返回已修改的数组并将其分配给result
变量:
function deleteEntry(data, result) {
return result.filter(function(item) {
return item.date !== data.date;
});
}
result = deleteEntry(data, result);
答案 1 :(得分:1)
Array.filter返回一个新的数组实例,这样当你执行 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);
答案 2 :(得分:0)
您可以使用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);