[英]How to remove items from array that are equals to the items in another array?
我必須陣列:
var shortcuts = [
{"name":"Pan", "alias":["Pan","Pan_he"]},
{"name":"Print Map","alias":["PrintMap"]}
];
var toolbarDef =[
{"name":"Pan_he","alias":["Select","Select_he"]},
{"name":"Draw","alias":["Point","SetDot"]},
{"name":"Find","alias":["OnMap","FromArea"]},
{"name":"PrintMap","alias":["Pentagon"]},
{"name":"Buffer","alias":["Layer","ShowData"]}
]
我需要從 toolbarDef 數組中刪除名稱屬性等於快捷方式對象數組中別名數組項目之一的所有對象。
這里我希望基於快捷方式和工具欄定義對象數組獲得的數組:
var result =[
{"name":"Draw","alias":["Point","SetDot"]},
{"name":"Find","alias":["OnMap","FromArea"]},
{"name":"Buffer","alias":["Layer","ShowData"]}
]
在這里,我如何嘗試實現此結果:
var result = toolbarDef.filter( function( item ) {
return !shortcuts.find(function(shortcut) {
return shortcut.alias.forEach(function(a){
return a === item.name
})
})
});
但結果與 toolbarDef 數組具有相同的行。
我的問題是我怎樣才能達到理想的結果,為什么上面的代碼不能完成這項工作?
構建要刪除的元素數組,然后過濾掉不需要的元素:
var shortcuts = [ {"name":"Pan", "alias":["Pan","Pan_he"]}, {"name":"Print Map","alias":["PrintMap"]} ]; var toolbarDef =[ {"name":"Pan_he","alias":["Select","Select_he"]}, {"name":"Draw","alias":["Point","SetDot"]}, {"name":"Find","alias":["OnMap","FromArea"]}, {"name":"PrintMap","alias":["Pentagon"]}, {"name":"Buffer","alias":["Layer","ShowData"]} ] let toRemove = shortcuts.flatMap(({alias}) => alias) console.log(toolbarDef.filter(({name}) => !toRemove.includes(name)));
btw return shortcut.alias.forEach
不會工作,因為forEach
不返回任何東西
在您的代碼中,您應該使用Array.some
而不是使用Array.forEach
。 Array.forEach
返回任何內容。
var result = toolbarDef.filter(function(item) {
return !shortcuts.find(function(shortcut) {
return shortcut.alias.some(function (a) {
return a === item.name;
});
});
});
這是工作示例。
const shortcuts = [ {"name":"Pan", "alias":["Pan","Pan_he"]}, {"name":"Print Map","alias":["PrintMap"]} ]; const toolbarDef = [ {"name":"Pan_he","alias":["Select","Select_he"]}, {"name":"Draw","alias":["Point","SetDot"]}, {"name":"Find","alias":["OnMap","FromArea"]}, {"name":"PrintMap","alias":["Pentagon"]}, {"name":"Buffer","alias":["Layer","ShowData"]} ]; // Your Code Fix var result = toolbarDef.filter(function(item) { return !shortcuts.find(function(shortcut) { return shortcut.alias.some(function (a) { return a === item.name; }); }); }); console.log(result); // Simple Case const result1 = toolbarDef.filter(({ name }) => !shortcuts.some(({ alias }) => alias.includes(name))); console.log(result1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.