首页 > 解决方案 > 如何从数组Javascript / Jquery中删除obj

问题描述

我必须使用 obj 数组(这些数组中的 obj 相同,具有相同的道具)。我想filesToRemove从 array中删除所有具有相同名称的 obj files。下面的代码抛出一个错误:Uncaught TypeError: files.splice is not a function- 我做错了什么?出于测试目的,我使用delete files[j];了 ,但它什么也没做。谢谢!

var filesToRemove = [
{ name: "SCO Bike Contessa 730 a.jpg"},
{ name: "SCO Bike Contessa 730.jpg"}]

var files= [
{ name: "SCO Bike Aspect 930.jpg" },
{ name: "SCO Bike Contessa 730 a.jpg"},
{ name: "SCO Bike Contessa 730.jpg"}]

remove(filesToRemove, files)
function remove(filesToRemove, files) {
    for (var i = 0; i < filesToRemove.length; i++) {
        if (filesToRemove[i].name) {
            for (var j = 0; j < files.length; j++) {
                if (files[j].name == filesToRemove[i].name) {
                    if (j > -1) {
                        files.splice(j, 1);
                    }
                    //delete files[j];
                }
            }
        };
    }
};

标签: javascriptjqueryarraysjavascript-objects

解决方案


您可以使用一些 JS 的数组方法。

var files = [{name: 'foo.txt'}, {name: 'bar.txt'}, {name: 'baz.txt'}]
var files_to_remove = [{name: 'bar.txt'}]

files = files.map(file => {
  var found = files_to_remove.some(o => o.name == file.name)
  return found ? null : file
})

console.log(files)

https://jsbin.com/pubirawoqe/edit?js,console

jQuery 版本: https ://jsbin.com/kejacezuta/edit?js,console


推荐阅读