我的javascript应用程序中有一个对象数组,看起来像
var data = [
{
id:2467,
name:'alex',
grade:'B',
},
{
id:5236,
name:'bob',
grade:'A-',
},
{
id:1784,
name:'carl',
grade:'C',
},
{
id:5841,
name:'dave',
grade:'AA',
},
{
id:3278,
name:'harry',
grade:'B+',
},
]
现在,我必须使用
之类的功能,根据对象ID从此数组中删除或弹出对象。function removeStudent(id){
//logic for removing object based on object id
}
应该像
removeStudent(5236);
然后,数据数组应该像
var data = [
{
id:2467,
name:'alex',
grade:'B',
},
{
id:1784,
name:'carl',
grade:'C',
},
{
id:5841,
name:'dave',
grade:'AA',
},
{
id:3278,
name:'harry',
grade:'B+',
},
]
我尝试使用pop()
,但我认为这将从数组中删除最后一个元素,而不是特定的元素。
我看过这篇从数组中删除元素的帖子
How do I remove a particular element from an array in JavaScript?
但是我没有找到我尊重对象的答案 需要帮助!
答案 0 :(得分:7)
您可以尝试使用Array.prototype.filter()
:
function removeStudent(data, id) {
return data.filter(student => student.id !== id);
}
它将为输入data
数组创建一个副本。
const newData = removeStudent(data, 5236);
答案 1 :(得分:1)
使用Array.findIndex和Array.splice
var data = [ { id:2467, name:'alex', grade:'B', }, { id:5236, name:'bob', grade:'A-', }, { id:1784, name:'carl', grade:'C', }, { id:5841, name:'dave', grade:'AA', }, { id:3278, name:'harry', grade:'B+', }];
function removeStudent(_id){
var index = data.findIndex(({id}) => id === _id);
if(index !== -1) data.splice(index,1);
}
removeStudent(5236);
console.log(data);
答案 2 :(得分:1)
使用数组过滤器方法。它将返回一个匹配元素的新数组。在您的情况下,您需要返回所有id都不是在参数中传递的对象的对象
var data = [{
id: 2467,
name: 'alex',
grade: 'B',
},
{
id: 5236,
name: 'bob',
grade: 'A-',
},
{
id: 1784,
name: 'carl',
grade: 'C',
},
{
id: 5841,
name: 'dave',
grade: 'AA',
},
{
id: 3278,
name: 'harry',
grade: 'B+',
},
]
function removeStudent(id) {
return data.filter(function(item) {
return item.id !== id;
})
}
console.log(removeStudent(5236));
答案 3 :(得分:0)
您必须使用findIndex
,方法是将callback
函数作为 argument
var data = [ { id:2467, name:'alex', grade:'B', }, { id:5236, name:'bob', grade:'A-', }, { id:1784, name:'carl', grade:'C', }, { id:5841, name:'dave', grade:'AA', }, { id:3278, name:'harry', grade:'B+', }, ]
let id = 5236;
data.splice(data.findIndex(p => p.id == id), 1);
console.log(data);
答案 4 :(得分:0)
您可以使用data
,但请确保将过滤器结果重新分配给var data = [
{
id:2467,
name:'alex',
grade:'B',
},
{
id:5236,
name:'bob',
grade:'A-',
},
{
id:1784,
name:'carl',
grade:'C',
},
{
id:5841,
name:'dave',
grade:'AA',
},
{
id:3278,
name:'harry',
grade:'B+',
},
];
function removeStudent(data, id){
return data.filter(student => student.id !== id);
}
data = removeStudent(data, 5236);
console.log(data);
,以覆盖原始值:
{{1}}