我正在尝试根据其中两个来获取一个新的数组对象。
log1 = {1:"London",2:"New york",4:"Berlin"};
log2 = [{id:1, location:"EU"},{id:2, location:"US"},{id:18, location:"Asia"}];
我想确保log1密钥全部存在于log2中,如果没有,我想删除它。因此,这将是:
result = {1:"London",2:"New york"};
我无法使用过滤器,因为它只需要一个对象。有没有办法根据两个对象数组进行过滤?有没有巧妙的方法呢?
答案 0 :(得分:3)
以下是如何在纯js中执行此操作:
log1 = {1:"London",2:"New york",4:"Berlin"};
log2 = [{id:1, location:"EU"},{id:2, location:"US"},{id:18, location:"Asia"}];
for (var prop1 in log1) {
var found = false;
for (var i = 0; i < log2.length; i++) {
if (log2[i].id.toString() === prop1) {
found = true;
break;
}
}
if (!found) {
delete log1[prop1]
}
}
答案 1 :(得分:3)
如果您使用的是最新版本的JS Array.map()
,Array.filter()
和Object.keys()
,您可以尝试使用以下更具功能性的方法:
var log1 = {
1: "London",
2: "New york",
4: "Berlin"
};
var log2 = [
{id: 1, location: "EU"},
{id: 2, location: "US"},
{id: 18, location: "Asia"}
];
var ids = log2.map(function(obj) { return obj.id; }).map(String);
Object.keys(log1).filter(function(key) {
return ids.indexOf(key) === -1;
}).forEach(function(k) {
delete log1[k];
});
console.log(log1);
应该屈服:
{ '1': 'London', '2': 'New york' }
希望这会有所帮助:)
修改强>
否则,对于浏览器兼容性等等,您可以考虑其他海报建议的lodash或下划线。或者使用polyfill!
MDN在旧版环境的以下每个页面的底部提供了polyfill(如果您需要兼容性):
答案 2 :(得分:0)
它有拔出,过滤和地图功能,可以帮助你..它非常强大..