我有一个对象和一个包含大部分相同数据的数组。但是数组中的数据很少比对象多。我想从数组中删除那些不在对象中的特定数据。
这是我的对象
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/