javascript - 如何删除引用对象的数组对象

标签 javascript

我有一个对象和一个包含大部分相同数据的数组。但是数组中的数据很少比对象多。我想从数组中删除那些不在对象中的特定数据。

这是我的对象

Obj = {
    "USA" :{
        "Country" : "USA",
        "Capital" : "WDC",
        "Rank" : "1",
        "UID" : "USA"
    },
    "UK" :{
        "Country" : "UK",
        "Capital" : "LONDON",
        "Rank" : "2",
        "UID" : "UK"
    }
}

这是我的数组。

myArray = [ {
                "Country" : "USA",
                "Capital" : "WDC",
                "Rank" : "1",
                "UID" : "USA"
            },{
                "Country" : "UK",
                "Capital" : "LONDON",
                "Rank" : "2",
                "UID" : "UK"
            },{
                "Country" : "China",
                "Capital" : "Beijing",
                "Rank" : "3",
                "UID" : "China"
            }]

您可以 myArray[2] 在 myArray 中是额外的,它不在对象中。如何删除它。

我正在尝试的代码是:

myArray = myArray.filter(function( obj ) {
        return obj.UID !== 'China';
    });

但这不是动态的。我的意思是 UID 可以是任何东西。

最佳答案

假设 Obj 的键并不总是与其值的 UID 完全相同,请尝试以下解决方案。

您需要首先迭代Obj 的键并制作一个包含所有允许的UID 的数组

var allowedUIDs = Object.values(Obj).map( s => sObj[s].UID );

IE兼容版本

var allowedUIDs = Object.keys(Obj).map( function( s ){ return Obj[s].UID });

现在通过那些不在allowedUIDs中的值过滤掉myarray

myArray = myArray.filter(function( obj ) {
    return allowedUIDs.indexOf( obj.UID ) != -1;  //only those which are in allowedIDs are kept
}); 

演示

var Obj = {
    "USA" :{
        "Country" : "USA",
        "Capital" : "WDC",
        "Rank" : "1",
        "UID" : "USA"
    },
    "UK" :{
        "Country" : "UK",
        "Capital" : "LONDON",
        "Rank" : "2",
        "UID" : "UK"
    }
};

var myArray = [ {
    "Country" : "USA",
    "Capital" : "WDC",
    "Rank" : "1",
    "UID" : "USA"
},{
    "Country" : "UK",
    "Capital" : "LONDON",
    "Rank" : "2",
    "UID" : "UK"
},{
    "Country" : "China",
    "Capital" : "Beijing",
    "Rank" : "3",
    "UID" : "China"
}];

var allowedUIDs = Object.values(Obj).map( s => s.UID );

console.log( allowedUIDs )

var output = myArray.filter(function( obj ) {
    return allowedUIDs.indexOf( obj.UID ) != -1; 
}); 

console.log( output );

关于javascript - 如何删除引用对象的数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47505085/

相关文章:

javascript - 如何使用 md-virtual-repeat 在 angularjs 中使用过滤器或搜索?

javascript - 从 json 字符串转换为 json 对象后如何从 Typescript 中的对象数组获取结果,我的编码有什么问题

javascript - 成功发布 jquery ajax 后调用方法

JavaScript RegExp 匹配(部分)小时

javascript - Chart.js 没有高度响应

javascript - 单击任何菜单按钮返回一页并向下滚动到位置

javascript - 如何在 SequelizeJS 中使用 $in 运算符?

javascript - 如何绕过 React 对颜色的错误处理

javascript - 如何访问作为复杂对象返回的 AngularJS 数据 (Pubnub)

javascript - 复选框 jQuery 的意外响应