javascript - 从 Javascript 对象中删除单个对象

标签 javascript

<分区>

如何根据 courseID 和 endDate 从以下 javascript 对象中删除一项?

    window.MyCheckedCourses = [
        { courseID: '123', endDate: '6/7/2010' },
        { courseID: '123', endDate: '3/9/2003' },
        { courseID: '456', endDate: '3/9/2003' }  
    ]; 

最佳答案

迭代是必须的。您必须使用 .splice() 删除相应的项目并 break for 循环。

var i, id = '123', date = '6/7/2010';
for(var i = 0, il = MyCheckedCourses.length;i<il;i++) {
    if(MyCheckedCourses[i].courseID == id && MyCheckedCourses[i].endDate == date) {
        MyCheckedCourses.splice(i, 1);
        break;
    }
}

你可以创建一个函数并像这样使用它的参数;

function remove(id, date) {
    for(var i = 0, il = MyCheckedCourses.length;i<il;i++) {
        if(MyCheckedCourses[i].courseID == id && MyCheckedCourses[i].endDate == date) {
            MyCheckedCourses.splice(i, 1);
            break;
        }
    }
}
// Example usage:
remove('123', '6/7/2010');

在 Ian 的 comment 之后编辑:

我假设您的收藏中有独特的元素。如果不是,则必须遍历所有项目并且必须向后进行,因为如果从数组中删除一个元素,它的索引将更改并且迭代将无法正常工作。所以这个函数是一个更安全的版本;

function remove(id, date) {
    for(var i = MyCheckedCourses.length - 1;i >= 0;i--) {
        if(MyCheckedCourses[i].courseID == id && MyCheckedCourses[i].endDate == date) {
            MyCheckedCourses.splice(i, 1);
        }
    }
}
// Example usage:
remove('123', '6/7/2010');

关于javascript - 从 Javascript 对象中删除单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18275295/

相关文章:

隐式类型变量的javascript问题

javascript - 将带有隐藏样式属性行的动态表列复制到 textarea jQuery

javascript - javascript 中的 for(let key in object) 有什么问题? IDE 警告似乎多余

javascript - React 中复选框 Sum 的组件

javascript - 为什么相同的值会被写入数组 5 次?

javascript - 如何使用纯 JavaScript 淡入 React 组件?

javascript - 未捕获的类型错误 : Cannot read property 'length' of undefined in d3. js

javascript - 通过背景颜色区分不同的结果

javascript - 如何在 Vue(Nuxt js)中以 5 秒的间隔更改随机文本

javascript - 为什么在 javascript 中引用对象的不存在属性不会返回引用错误?