我有一个id的数组和一个有id的位置数组,我需要返回每个id的位置。
$scope.stores = [1,22,16]
$scope.storeData = [{name:'loc1',id:1}, {name:'loc2',id:22},{name:'loc3',id:40}]
这是我试图取代的逻辑
if(event.stores.length > 0){
for(var i = 0; i < event.stores.length; i++ ){
event.stores[i] = $scope.storeData.find(function(store){
return store.id === event.stores[i];
})
}
}
我尝试使用map和filter返回结果列表,到目前为止没有运气。
答案 0 :(得分:1)
我会这样做:
var ids = [1,22,16]
var locationInfo = [{name:'loc1',id:1}, {name:'loc2',id:22},{name:'loc3',id:40}];
var locs = locationInfo
.map(item=>ids.indexOf(item.id) > -1 ? item : undefined)
.filter(e=>e);
console.log(locs);
JSFiddle:https://jsfiddle.net/Lgdo22tx/2/
答案 1 :(得分:0)
这是你怎么做的
var map = {};
locationInfo.forEach(loc => map[loc.id] = loc.name);
var locations = ids.map(id => map[id]);
当然,对于没有相应位置的ID,您会收到undefined
个条目。如有必要,您可以过滤locations数组以删除它们。
答案 2 :(得分:0)
在.filter
数组上使用.includes
和stores
,然后.map
仅返回位置名称。
const stores = [1,22,16]
const storeData = [{name:'loc1',id:1}, {name:'loc2',id:22},{name:'loc3',id:40}]
const x = storeData.filter( item => stores.includes(item.id) ).map( item => item.name )
console.log(x)