如何使阵列功能正常工作

时间:2017-03-24 18:42:56

标签: javascript arrays

我有一个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返回结果列表,到目前为止没有运气。

3 个答案:

答案 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数组上使用.includesstores,然后.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)